{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Convolutional Networks\n",
    "So far we have worked with deep fully-connected networks, using them to explore different optimization strategies and network architectures. Fully-connected networks are a good testbed for experimentation because they are very computationally efficient, but in practice all state-of-the-art results use convolutional networks instead.\n",
    "\n",
    "First you will implement several layer types that are used in convolutional networks. You will then use these layers to train a convolutional network on the CIFAR-10 dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# As usual, a bit of setup\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from cs231n.classifiers.cnn import *\n",
    "from cs231n.data_utils import get_CIFAR10_data\n",
    "from cs231n.gradient_check import eval_numerical_gradient_array, eval_numerical_gradient\n",
    "from cs231n.layers import *\n",
    "from cs231n.fast_layers import *\n",
    "from cs231n.solver import Solver\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "# for auto-reloading external modules\n",
    "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "def rel_error(x, y):\n",
    "  \"\"\" returns relative error \"\"\"\n",
    "  return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train:  (49000, 3, 32, 32)\n",
      "y_train:  (49000,)\n",
      "X_val:  (1000, 3, 32, 32)\n",
      "y_val:  (1000,)\n",
      "X_test:  (1000, 3, 32, 32)\n",
      "y_test:  (1000,)\n"
     ]
    }
   ],
   "source": [
    "# Load the (preprocessed) CIFAR10 data.\n",
    "\n",
    "data = get_CIFAR10_data()\n",
    "for k, v in data.items():\n",
    "  print('%s: ' % k, v.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Convolution: Naive forward pass\n",
    "The core of a convolutional network is the convolution operation. In the file `cs231n/layers.py`, implement the forward pass for the convolution layer in the function `conv_forward_naive`. \n",
    "\n",
    "You don't have to worry too much about efficiency at this point; just write the code in whatever way you find most clear.\n",
    "\n",
    "You can test your implementation by running the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing conv_forward_naive\n",
      "difference:  2.2121476417505994e-08\n"
     ]
    }
   ],
   "source": [
    "x_shape = (2, 3, 4, 4)\n",
    "w_shape = (3, 3, 4, 4)\n",
    "x = np.linspace(-0.1, 0.5, num=np.prod(x_shape)).reshape(x_shape)\n",
    "w = np.linspace(-0.2, 0.3, num=np.prod(w_shape)).reshape(w_shape)\n",
    "b = np.linspace(-0.1, 0.2, num=3)\n",
    "\n",
    "conv_param = {'stride': 2, 'pad': 1}\n",
    "out, _ = conv_forward_naive(x, w, b, conv_param)\n",
    "correct_out = np.array([[[[-0.08759809, -0.10987781],\n",
    "                           [-0.18387192, -0.2109216 ]],\n",
    "                          [[ 0.21027089,  0.21661097],\n",
    "                           [ 0.22847626,  0.23004637]],\n",
    "                          [[ 0.50813986,  0.54309974],\n",
    "                           [ 0.64082444,  0.67101435]]],\n",
    "                         [[[-0.98053589, -1.03143541],\n",
    "                           [-1.19128892, -1.24695841]],\n",
    "                          [[ 0.69108355,  0.66880383],\n",
    "                           [ 0.59480972,  0.56776003]],\n",
    "                          [[ 2.36270298,  2.36904306],\n",
    "                           [ 2.38090835,  2.38247847]]]])\n",
    "\n",
    "# Compare your output to ours; difference should be around e-8\n",
    "print('Testing conv_forward_naive')\n",
    "print('difference: ', rel_error(out, correct_out))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Aside: Image processing via convolutions\n",
    "\n",
    "As fun way to both check your implementation and gain a better understanding of the type of operation that convolutional layers can perform, we will set up an input containing two images and manually set up filters that perform common image processing operations (grayscale conversion and edge detection). The convolution forward pass will apply these operations to each of the input images. We can then visualize the results as a sanity check."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\skimage\\transform\\_warps.py:84: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.\n",
      "  warn(\"The default mode, 'constant', will be changed to 'reflect' in \"\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEICAYAAABWJCMKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzsvXu8JsdZ5/d9qrvf+7mfmTNXaUaju2xdbFk2BhavwQbWGJtll+AABhKyMRCCP7Cb3Q9hE0JYYBN22V3ALJD4g4252gRsIBsCNuAQZBNhXWzLHlkjjWakuZ/7ea/dXZU/qqvfemv6zMjSkTWWzvP5vHN6uqur6/pcfs9TVWKMYZd2aZd2aZdefqRe7ALs0i7t0i7t0otDuwJgl3Zpl3bpZUq7AmCXdmmXdullSrsCYJd2aZd26WVKuwJgl3Zpl3bpZUq7AmCXdmmXdullSi9JASAiPyYi/9tOp30WeRkRuXGbZ/9JRL57J76zS1++JCK/LiI/9WKX4+VCInKkmJfxi12Wa5GueQEgIt8jIp8WkZ6InBORXxaR2Su9Y4z5aWPM9z2b/L+YtM+HjDHfaIx53wv9nZcDici3i8gnRaQrIheK6x8QEXmxy7ZLXxoSkZMi0heRLe/3iy92ub7c6JoWACLyo8C/Bv4ZMAO8Drge+DMRqW3zzq6kfwlTMSb+PfC/AvuAJeBdwFcCl40JEYm+pAXcpS8lvdUY0/F+/82LXaAvN7pmBYCITAP/E/BDxpj/yxiTGmNOAt+GFQLfWaT7CRH5kIh8QEQ2gO8p7n3Ay+udIvKUiCyLyL8stIev897/QHHtzMXvFpFTInJJRP57L5/7ROR+EVkTkbMi8ovbCaKK+vyliHxfcf09IvL/isjPF3k9ISKvL+6fLrTa7/befYuIPCgiG8XznwjyvlL9lIj8CxE5UTz/PRGZ/+J75MUnEZkBfhL4AWPMh4wxm8bSg8aY7zDGDAuI5ZdF5P8UkS7w96/UfiLyJyLyQ8F3HhGRt4ulny/6Y724/4oiTVNE/k3R7usi8tci0iyefbCwVtdF5OMicscV6vRNIvJQMQ7+RkTufCHa7uVCIhKJyM8Vc/cJ4C3B86NFn2yKyJ+LyC8FvOJ1RT+sicjDIvIG79n3FHN1U0SeFJHv+NLV7AUiY8w1+QO+AciAuOLZ+4DfLq5/AkiBt2MFWrO494Hi+e3AFvBVWA3x54r0X+e979IeAQzwa0U+dwFD4Lbi+auxVkhcpP0c8G6vXAa4cZv6/CXwfcX19xR1+14gAn4KOAX8ElAH3gxsAp0i/RuAVxb1uxM4D7z9Wdbv3cAngENF3r/i2u7L7XelMeGl+XVgHWsRKKBxlfb7NuCT3vt3ActFW3498HfALCDAbcD+It0vFX16sOjD1wP14tl/AUwV7f3vgIeC8v1Ucf0q4ALw2iKP7wZOunx2f1ccCyfdGA/uvwv4PHAYmAf+opiXcfH8/mKO1Io5s8F4/h8s+v4fFGPlTcX/9wDtIu0tRdr9wB0vdjs873Z8sQtwhQ7+TuDcNs9+Fviz4vongI8Hz3/C69T/wWd4QAsYcWUBcMhL/7fAt29TjncDf+D9/4sRAF/wnr2yeHfJu7cM3L1NXv8O+PlnWb/PAV/rPd+PFRDbMtFr9Vc1JoC/AdaAPvD3Cgb7/qvk47dfHVgBbir+/3PAe4rrNwKPYYW+8t5XxffuehZlni36dqb4/68zFgC/DPzPQfrjwNe82G19rf+wAmCr6Hv3+6+AjwHv8tK9uWj/GLgOq0C0vOcf8Ob/Pwd+I/jOn2IFc7v4xrcCzRe7/jv1u2YhIOASsLgNpr+/eO7o9BXyOeA/N8b0sMz1SnTOu+4BHQARuVlE/rgw7zeAnwYWr5LXdnTeu+4XZQvvue++VkT+QkQuisg6Vstx371a/a4H/qAwadewAiHHYudfbrRMMCaMMa83xswWz9x4nhgPV2o/Y8wQ+D3gO0VEAe8AfqN49jHgF7Ha/nkR+VWx0OQi1rI4ERawgCB+toDcNrCMCqrHyfXAj7q+KfrnMLZPd+nq9HZjzKz3+zWC+QA85V0fAFaKOeLIT3s98I+D/vgqrNXXBf4z7Ng5W0CHt74gtfoS0rUsAO7Hwi//0L8pIm3gG4GPerevtKXpWSz84d5vAgvPsUy/jDUvbzLGTAM/hoUGXmj6LeAjwGFjzAzwH73vXq1+p4FvDCZKwxjzzJeg3DtNbky87SrpwvFwpfYDCyl+B/C1QM8Yc3+ZkTH/wRjzauAO4GZsQMIlYAAcq/j2f16U7+uwgQtHivtV4+Q08K+CvmkZY377KvXbpe3pLFaIOroueDYvIi3vnp/2NNYC8PujbYz5WQBjzJ8aY96EVUA/j4WKv6zpmhUAxph1rBP4F0TkG0QkEZEjwAeBpym0tGdBHwLeWjhZa0Wez5VpT2FxwK1C+n//c8znuXx3xRgzEJH7sEzG0dXq9x+BfyUi1wOIyB4RuRoDvSbJGLOGrd97ROQfiUincHLfjTXRt6MrtR8Fw9fAv8EbVyLymsJ6SIAulunnxhgNvBf4tyJyoND6v0JE6sW3hliLpIW1ErejXwPeVXxDRKRdOKynvqiG2SWffg/4b0XkkIjMAf/CPTDGPAU8APyEiNRE5CuAt3rvfgA7l76+6NOGiLyhyGtJRL65UECHWPgp/9JV64Wha1YAABhj/heslv1zWMb7SayU/trCdH82eXwW+CHgd7AawCbW8fas3g/on2KZxyZ28v7uc8jjudAPAD8pIptYzP/33INnUb9/j9V+/+/i/U9gnY5fllSMiR8B/jtsPc9jHdv/HOsPqKJt28+j92N9MR/w7k1j+3kVCyUsY8ci2LHwaeD/w/oQ/jV2Pr2/SPsM8Ci2vberywNY3PoXi288jvUP7dKzoz+SyXUAf4Dtrz8FHgY+BfwfwTvfAXwFti9/CjuHhwDGmNNY6+3HgItYXvPPsP2qgB8FzmD7+2uw4+rLmqRwdLxsSEQ6WGfOTcaYJ1/s8uw0vdTr90KRiLwT+CfGmK96scuyS186EpHfBT5vjPkfX+yyvBh0TVsAO0Ui8lYRaRXm289hNbeTL26pdo5e6vV7oanAhH8A+NUXuyy79MJSAesdK6DDb8Bq/H/4YpfrxaKXhQDAdvKZ4ncTNqzzpWT6vNTr94KRiHw91tw/j3UW79JLm/ZhQ7K3gP8AfL8x5sEXtUQvIr3sIKBd2qVd2qVdsvRysQB2aZd2aZd2KaBdAbBLu7RLu/QypWti58y7X71oVCSIaSAqIU6aoBJEIkQEEUGnGXme0+v1MHFMpBLiOKHWbKAkJs8FY3Kk2BE4SRKUUmitiyXdCmOMzUuwf7VGxDAcDul2u6SDPoim2ZghqTWIG3UAYgQxQK4ZaluONE0ZDFbRoy1MklJTCXHUII7q1KIGUZJAEqFyBeQgGuUtanbQm9YaU5RHvN2MbbkBDIjGmBy0jJeoKxnXwWRlfsoooihCa41SY/meY8q2yLIRWiuMFhBNlmX0e0NWl5fpbgx3bGHbvffea0QEpRRK2XJFke1TY8blGQ6HpGmKS5skyUT/ufaq6ttx/4JSqkxjjCFNU7rdLv1+H2MMjUaDWq1Go9GYyNvlk2UZWZYxGAzK63q9ThzHxHFMkiTEcVy+69rXfdPVy+9fdz/P88vq4adz7RHe9/+vlCLLMuJ4ctr65XfjI89zsiwjTVO01pw+fXrH+vVHfuRHjOtHGLe7Xzd/fPv94r/j9134vsvDb1P/fjkPvDzdvbAMjvz+yvOcPM/L9P548MsXUhRFE9+tKndYlrBv/Xnpvx/m4T/zx7h73xjDz/zMzzyvfr0mBMDiQgsVZdiV+DkqTsnRRBKXjZJndoA3WgaURshQCowYlIoxWjBalZ2JGpWNmuc5YmKyLANAoqIDFICGaAR1zSDXgCZmRE1iYolACalRqNwgEURoMJpccmoKtBhyQCkQFJFqkMQNJIrIDUiSIGIw5BgzHoCu10RrlB4P1HLQGkGkGDQigGDiGhhj381zu97VgNBgvPg1wxhBqbhkOgCZGPJc20Gfg9GmnARZlpLlA9I03cFehenp6YkBKyJE0eTuzMYYms1mKQB8BqGUKpmZ+7/PTMYCzfarn7e7H8cx9Xq9ZEQh03bf8v/6k9wJrTiOy/xF5DIm7L/vly185veJI1eWKIrK51VMzBhDHMclw3fkGL971/0/TdPyeifJfdsxSV8o+mX16+orAX7bh/WsYq7uvjGm7Bv3PMsylFKV/eEYr8unVACLcrr+dHm6Mrr29fvT3Xdj0R+DYPvV5RcKtSu1nz8nqsrpl9dd+/9/vnRNCIB2u029aSeMmGjc8DKeiDqPgAhjamTGgFGIRORGY8wIACWJTas1bht417npKC13i9cqwhChRZFoTS2CeizUlIBpEEcxeZQSRwqlYiJj0AUzjiUnI8OolDjRjIBEGZQUQkBp8miIEKGIEWPAgBJhzJ+M1e6NQojQMho3hvE0JQPGYOtiFFqNJ0NEjDYGiWJEj7XLVOfIKHXNh7V8hEwbQNAZ5MZYgWkijLGWhtag9c4yiunp6XJi+pqgY+y+Fhdqg047gzHz9DUtpVQpwGq16h25ndY+HA7RWpfMx1kQIcP2yU1Mx9wcw3Fld2ncd/xJ61stYf4+46iyGEJG6vJ0dXVpfKvC/6YThq79QmGxU5RlWdkmvvUWUsh03TjwmblfV/89R1VCP8/zy4Tgdlq0e8e3Ot1YcOMo1OZdn7o8nPANy+u/U2XBVVlJ4TMnVFzZ/LxCKyK0pJ4vXRMCoF6vU6sVWh5jCENiy7TyPEeY1O5AMBqMisiyrGi8gachuEa2E6FWHze80YIWQYsixpBkGfU8p1FX6ByreccgDBHJ0OJJba3Ic02zochTRZrWEBVbrTsCpTRGKSIlVnFHl1qS0ZlXa2vOC4IUK8rzPCfPTFl/GA8EpRTOIMBjnlobxEjBxA06B2Wc1QNKIrS2TN99VxAM4/R5btC5sNN8IkkSGo1G0Q8y8XODOdSk/EkQastVpravlbk0IWNwkB1MmtC+JugY5nA4pNVqlUzNr4tL677hw1nu23Ecl/BRFYzgM6+QYTqIpwpG8bV7GAsdn6mF2rIPc+wkhcIzpFCAOXKM1ofDQtiu6j2f8VXBfaFlWFVevw39/gPKfqx6v4qR+898ayS0bq9Uliq6Uj9VQWxV1uQXS9eEALCmYdGpaFRkiGJVQjX1eh3MeIJjUpSKESLSPEMaiW1U8SfP5YyilKJa0BSasDHUEqslSwuyVMAIuQyBGCUGLWNoxOhozKSyGnkelfmrJAYFuR4hkoOJQZymN0SK5rZ1iMlzQ5bqiUkMgjGWaWVaId7g98kYwRhdwEEFSmRyJBohYoiUQRvBSG4FVJ6NzVWjrVDQmjxPyfJhUeYd61LgckZRZfJWka+1+QIwfGey3ZhghG5y1Gq1CZgILCNyUIqfZ57nNBqNUmsOBZWvtW4njIwxJEkygcf72pzL29eE3bPQwnB/Q4bp3q3C0F165wPQ24yf50M+ZOKX9WqWRqnYee1dwrJXYMAhXLedUK3S/v00vvBwgtFZeX6fumvfYvXzDwWVr52Hafz/b8e0fWs4hL5cecP7O2XVXRMCwCRWaxaVI9TQBiIVoXENqcrtzUQpRBpWgzUGItt5iYkwalwdMXnQ+GMGYuGOscY5fmeMmxvdKDoEjActKQStC0zeuGvQxn5bKcXIDIvO0mideeZfBliHrtENqwnWJxmdEFmNXIMx+YRG7OAhrbX1LxgwucYU2FZeaPNj2MxaU1mWUje1sfms++S5kI5yhibD6BwVC8kOjwY3YEPm7WtgoUPMPXdMpkqrCtP536qCPdwEdu+ETMU3wX1yTKJqMvuwgSMfDw4d1A6v9id7KFxCBuGeO0buOy19uMl/zzl+HfkWxU5TCEmEFpG777dBqEH76XwKhWDVfPXL8Wy0Zz8/N/a01gwGg4m0obbvWwtVebt8t2P+7rpKSIRp/ech7OULmytZPF8MXRMCABMXOHmEdQQHjyu0LUdRFGEsxnHFT1RFbPh/XRqlbUcrM9ZyNGPNSrzPTGhdjDWZhmlYbD8XRHmakVGFReC0OlVi7y6JUg6ScYzSDRDrDwCL14+0dQaLBs0Y99VaynSCQuucPNe4vfO01uRZRJoaRjFEqSJJIrLM0O++MIzCtYtPz8Zcfjb5+P0YwgNVcEEV0/Gdvz4lSVI5sUPrwE/jCwH3103qKsHgk49r+4zOT+/+hhE/7p7WmtFoRBzHDIfDCctnp8iH3ELyGZVf3vDaUchAwzTueailX+nb4b2QfPjNV0JC2NHvg6vBLc4a8vP22ym0+PwAB0ehdenXxxcMvs/p+dI1IQCUcox/HAEhIiBcpuGFkEKmLQwiIhi8CAImpa8j26mXa51Q4ORuQOrx5FKxF1apJzWwkolQdApCpApnHYAYkrhwdpkIUGiTERVWRTioDXnhoAWtJ7VWWzzbDokWRBsUUjjCDVrbTQvDSae1LjXBLLN4f54bBhEkWcRwmJGm0Grv7HDwJ5bT/tx1Fabqv1eF+1aZ2I6qNMMQ6w+vfSjDh5qqIAb3fZdGRCZgJJcurJfzHRhjSoe4P+nDeoRQlUsTaot+v/qCwPmbRqNRaT3sNIXO25C2exZaA2G9fOtmu/fDPLajKgXPUVV4sc9cQ0HkX1cJv9DiDCE/943txqFLux085I8pf5xeqQ+eLV0TAsBVMIliUjFlQGMiBiVF41EdcxsVqY2ixNhFBDEKUQa7zfs4QkJEMGqMQUbihaX5ml1shYjWmhSNRPZaiR0ABjC+9WDGMJWDaixGbx3LIIgTDFLE4DOGJ8YMTxUyyFzmcFS4gSOo0vLRCG6ACUbsc6NtG9iBBZHU7LeimNxkZKm1NpKR9bcMRzH1/s6Ggbr6xXE84fisCse80mD201YxCQeNOMYcmtq+g9gxYZ/xhN+5UnSQX44wZLPK5K+CQ5wGl+c5SZJMMBA/aipsGz8vl75er5d1cczeD7lM03RHnIVVbeDXKaz/dhQyzyrNv2osXE27D/vAV6yqxliV/8VdX8lv4iukro+rQlCvZqWElsB2FpBfxlCAXMkR/2zp2hAAKgbBMlXj4W3KYEQmjneyDeYmnsJhMk77tvcFEYVA+a5lEHEhTIqJLoIKOsP/67RWY6wwEFFEsTfg/Q6YiOVnIp+yfIG5C+OJHkp0X0Ny6SYbzQk2PVHuvPB9iFIYrVFKrK9EO8eWhZxUJERaIXW7ME5jSm11pygcoFXRFqEjNnw3nIxVE8u1n0vvNPPQcgi1fN9sd++MI7CuTH5fVpW1ioGH5fdjzv3nYbl9JcAPBfWZwoRSFEVlX4aa506Qsy7Cuvl1eDbMabuw0Srm5t+rEj7+Xze/wnDjcOyE4/BKVkNVOasEs///7cZtFbTkKzfbWUR+mjAM9rnSNSEAYBbBOjYVQF4MfHTh9BUwhXZqbKglYBm+cU5bjXMfyDjQESUx2mQIyr5sgLIhLewUMuZQ01R5YQ0YjcafcF4HR54A0F7Ekrt3GROYxPZ8PNl/ZyLu3B9wkqMi2yCasearRJUCyC0kU8ogiRWuxtg1CyKFYzKFKDbUiGm1/JPynj85TdRnkuGArrLqfFP32UzGKs3bvx9qW+5ZVX+HZfG1Ox+fr4KXqgT+dv0aaoF+Xj7z8q2Y8D2RcUSVsyZCRvhCUKhdV41z3+rYjhE6/4jPsF2dQiZa5WDeTviE5fTvX+3/7t52465KSw/Jtzir6Er5h9aru+e/s5MW3TUhAJSKkSgmRxA9dpolKkJK7dvYiJoITOH0dO07HkiOmQtauTTFhIDSR2D/2O0ZNMm4sXXuWRvWaWothgijFLnoEnIC0KK8TvEGaORirwWl8wICMROwjzZjbTTXKSoqGCXjsNJw1Wf5ZREUBlE2nFXyBGsJYAVpnqMig9FuZeL4baUU5MZGXRkwdUgwREroxTsLFbhVtLZ98sqJ7a6rtMFQE7waNFOV73ZpQyGzHZThM3DfcnD1CzV0H0LwBZ+fn9PkQ6uvyhnpC0vXhlVYsh9i6Tuzfathp8h9K9SsQ8vWldtnxKFT1JGvqbt0fn/48F7IQK9mcfhRYC6dD5eFeVUx+dDCqrI8/Pr67VElXKrGpq80hBZP+P2dsuyuCQEQqRkiF8KpvPA6U8A8xsEWgDEovAlghkSOf5scCqhGirBPJyV03pv4pjE5FP4FygHsOed0PNbOMWDcpEzGy76jfBylU/xrIRevYyQqfhQrcym+5w0642vFpmgT5xQ242vtDTxyoIB0TDaGhHREUggOFakJxut+9v8WIkPZgZellzOr50tuFa2t16QjuIqxh8ywSjMO3wnDHL8Y89t/x006f6sCNyF9hufn6U9MB7n4IYN+eGkIL24HXbjrqm0hnO/A+VR8Cyt0TvqRKDtNfmRT2C4hIwzrGcJwIaN1bRVCaH5b+EK3KpomjPpyjvIQbwdI03RbqNZ979lQVfDAdumuZCGEgjK0TkPo7/nSNSEAVNxEFUyrbHARDHbFrr2nyUyGUnZjtrKDsRu2GWPspmpKYUQs7CM2MsgYg6E2oVlpk9pJpj3HmfEYhKkXZXCTE7I8w+iic4wiz8ZbOMRiMNpY52w2GHeWaNLMlddNBtDGDt4sy4ipYfIivR4PdK2tt2LM9DNEnL/DrlMwWiOiraAUbRd/FfCWb077mqnWxXOE3KQoBXEiO+4DqMovdAC7soX4rh9J4YfqVUFk/v3QB7CdpuX++szDpfeZgq9pTUR9BRZEKBzcSmC4fI8id287eAgmo018hud/36UPrUXHJKqckztBvmD3aTs4zH++XfSNY9q+BuzSbec49iOsHFXBJ/59X/MPhZK79q0uP3/fCgvrEDJkN879sePeqWonv56h8NtOwXm2wulKdE0IgHpsmXikxhNFRIiUjcDPlQGTEKk6kmlQ3uDR4yXeYuwGcsaY0qIwmILZ2sVSKobc5KDrGAOiDXGtRpobcj1A6dSGVupkrOFID02NNG9QVxGjQUaj3mIANGtCNthiFI+oS0ySRuQqAWwop5hiwEV2ywo3eGJlN+tqNWfpdjfHzuZirGtjQBUTocDrRWcFQ3QmrfVzaCBGo7S9dkJCm0IDzXOMzlBF26AMxmiMMjRNjWGkGeQZyM5GAVWFC/oCwPWzr+WEjLeK4TnyNSLgMmvHh2TC93whoJSi0WjQ6/XKlaH1ep3Nzc3LmJSP0VZpcC6qp16vMxgMyjqFTCzEyH2tPxSIvuLit22VA9nlcbVQzedLVRqoD4lVbUFRZfn5jM63DkIL0FdinHB17eQzYJfO7tY73tV1MBjQbDap1+s0Go2JfZ4chcImdNBqrSf8LFUCwm8fPwTXVwK2CwN2lkrI3N11COe9ZKKAqiqilN0XyAgYhWVeTruRyaXwY03HNy+LfMQuxsKb9GISVAG1ZJGgVYM0y6jXW2SjIbpYrSsixPWYJD7AdTfcRJpp9h86xP59Bzl+/AQHlqY5d/Y0Tz75BIPRkGywyUCGGOP2IwIKeEfnFtbRuS17rVYDM2LQz4iiqWIASwn02/ftz9aTosyGLPcWBlFMDnK0MfbntF9FuaAsUmNTWEsynlBEaKMxJoWdsSpLqhrIYV/7zN+Rz8Cr0vp5h4zDXSdJQhRFjEYjpqen6Xa7wOSkbjQaHDlyBBHhyJEjzMzMcOrUKRYWFrh06RInT55kZWVlIpTSZ7y+pug0b3/zOQfVuDq5v64d/HLD9vCIzyTGVtwk9v9CxPtvR9st4vOtFh+nrtJg/f9vB2eEmrnWuoxAclt8N5tNYNwH3W6XtbU1zp49a+dvsYtrp9PhwoULNJtN2u027XabmZmZUmBXWWmO0jQtrdAq53bYtyHMBJPrO/z7YX4hdOYL/3DH3J0Q8NeEANjelIlxS7qMceGS4sLsyw6GyyMzlBqvCTDGYHINRbx80qiRpilLS0vs2XuI3mBIUmtQSyKG3Q1MrmnV7aZeR48e5eabX8H03CxJvUaNAVmq+Zp7bmWY5Xz+C4/x2nvv5bHjT7GyeoHz58+wsrJKmvXQpMRRRO5pjRILURwzzDI0dYhqaN3A7iFkIR8HXYnR1udRaPQYbYVg8VxrtwZAYwonuW2nor2KRWFKxD4jBwHtr3YUwOQYndt1BTvcryGGWdXfVf8Pzeywj90z/x23rfTevXs5cOAA/X6fer3O/Pw8Tz/9NHEc02g06Pf73HbbbSwtLbF//35qtVrJbF7zmtcAcPr0aV796lfz6KOPcvHiRc6fP8/a2loJD4WCy2mTbpK6Z7EHbYYTN9TSQwepy8PHxavgEPeuzzj8dt0pvPhKFFpc/rbNfnmqBL7TbH2B6tfDPet2u6yurpZ16vWsX280GpVpnPX2yle+cmKXWLdrrMvj7NmzPPnkk7TbbRYXF5mZmaHZbE7ASq7dGo3GBFQYOsDDCK1yrm/D16oso5Dp+33vyB93Vfk8F7omBICRGK1zRJkxTCFjR2lS7AWktbYbxJUbvRmruWIZXq6i0j9gzzoxiIFYhB52oZlCmG622Xv9Xo4ePcoNR68nqTWot9q0G3U2NjZoNps0klqJMyb1WtGhYEyLpFZo8XrEPa+8FVTEbTfdiGHIxYurfPr445w7d56HHnyE0XCVOBKUARUn5HlKmo5QKkIpF9HhcO7Cj2FAtMZEoYahPIhIY3SGYH0TNeshR2Qc70+kiYxl+CIJShVhoGrkOVFtWSLJUNLY0X4NJ4S758jXgkNmGGLFLr1/z00QF200MzPD7OwsN998M0eOHKHRaJQ/169upadjFH45fAfbsWPHEBGOHj1KnuecO3eOEydOcOrUKY4fP0632y3LVavVGI1GlZPfQRm+tVLFCH3h4GPTvqM3TOtDQH50kLt2WutO+wL8slQxszDaK9SQq+oaCjywTLvf79Pr9VhfX0drzezsbBnyum/fPjY3N6nVamWe9XqdZrNZtoHrb5dfrVZjamqqbLvV1VU2Njbodrt0Oh3m5ubK/Ny4CsdoGCjg94nPzKvGs9+GobDezlcU0pUgyC+WrgkBAEVFRU9s4eBTiM+NaRxdocvYeoDGBBvLAAAgAElEQVTi8IzMSu1WvUE9qXHsyFFuuv4At9xyi92GutWmVm9iCm253W7b/IynhRmNWz8AudW6ARPVSJT1QbRrEdpEHNyzwHSrw+Zml72daR74zIOsrKwgIqSjIXES42Mt4QR3AkCJIiujkhzcMzlgVBQVAg4icfi05xAV25pJHJPrtBQOQjKOSknqGC3k0ZAkGX6RvXZlChl/1YC9Go5Z9dxBK1EU0Wg0aDab3HjjjRw+fJhjx47RbDap1WrlTqBAucahCsN3Gp0PV7iJX6vVyPOcgwcPsrCwwM0338zs7CwPP/ww6+vrgNVAw3L6TkC/DZ5NtEgoQEJnsbt2DCqMFvIhJN9p+UJQlZa7nabvC8HtrDn3t9frsbm5SbfbRWtNu91mfn6+PJ3N5Ts9PX3ZN/2Iq3DMJck47FtrTavVotfrsba2xubmJsPhkD179tBsNifKGNYnzDd09vr+DRhHcG3XblUO8jDv8PsvKR+Ag3iEsQalzGSa8FprDWa84jHXhQAxNjwUFVkmH8dcd+ggN99wjKNHj7JvcX5sokZ2/YAxmkh5WkqxjYQIKGP3W87dwRciiBEiFTHcXKUeC2kOojLqqk59rsPi3BSH9u3hq1//Kh7+zOd56LPHOXf+GTY310HsNgw+lR07se7ZMQI3ObyJXgwAMZBECskLs9sTABhlF30ZiLzJYLyGVUZhlFCrseOaYjjIq5yhoUUAl0eThFhwFNl+FREOHTrEjTfeyLFjx9i7d+/EHu9Oy/IdhqEZDZPYqns+GtkILxdmGscxMzMzTE1NsbS0xL333ssjjzzC8ePHuXjxIr1e77K6XYnRV2nBPmN3dajae6aKEYRQhMsrZDw7QVeC81yZqurqP6saByLCYDBgY2OD4XBInufMzs7SbrdLn46/EZovNMJ8Q1gGmBg3Pq4fx3YRZL/f5/z583zhC19gdnaWgwcPTvRHVZ+5+1UQ3XZwTdg+rpw+7Anj8eOgLF8I+RDV86FrRgCUmnzRNoIgyhs43m6bOismMxFGeaFexcphnaXMzs6i0pR909Pcecft3Hzb7TRaUzRaTTJRaMmpGWEwSmnEBtEZOhprgYlKMJFljlor8lGfWDSIIFENRjlmeAkZDcixzuTIGKRVK3B8qDViFuM2X/GqW7np8AKffORzfPrEOVZXNsj0FjofokhR3h5GFFE/GsPkJhggMtYqI7GLybSxq399AVJqsUWbIRZMM845zFiDEmVIR/nEkYc7Sf6ECLFwmDSh/ech43cOOAcBLCwscNddd3H99dczPT1dnvPr8h4OhyW2r5QqI0ec1uy+6zB9N9FHo1HpbHT3fC1aKUWz2eTgwYNMT09z00038YlPfIJnnnmG1dVVjJnck8fV7WorY30GUjrxRSqFYvh+2HbuFzoNd5p85+l2QiZkwqFV6H7dbpf19XVGoxFZlpEkCQsLC6XG7vooTdPynj9efSvOMWgfvnHph0Nr5brx5MZFrVYjSRKazSZZlrGyssKTTz5ZQoXtdpupqalSgPj18xUNX0hU9VkVfOMLLT9fBzW5iKrQF7QT/XpNCIAquiw8S8ZMUiV+vL4niYkgz4kxNHsD3vSmNzG/OE+706TZqhMllhHUW03LpEc59ShC5ykKA6kuNlzLySN7hoBSCm0SIoF0MEAlCWo0QrQdjDpNQQyiIrJRRlTLIBqiiwGhjTVfkzjmqzsdjh7b4sLKBo89+QVOPfUEg+5GWf4QLgi1B3+guRoXrH3MSMTfCmGMVfoYN3rSvHy2+988X/ItgFBjC5l+lYntGN2b3/xmFhcXabVatFqtMpLDaUouXM8xYmdeu59vFcAYwvG3U/YZ9mg0Kv0FrqwiUkaRvPGNb+TixYtcunSJJ598kqeeempij/lQi/eZkvt/aNKHabYLAfQhB7/NnNDaKaw4pJABV0E9MB6zIbPytejBYMDy8jKj0YgoilhcXCyje5yG7i98c3mF6zdcep9hunt+iC2Mx5MPJxljyuNC5+fnmZqaKgWGY/x+KHdY7yrLILQaqqAbV87tIrlcnZ2FXgVtPVe6JgSAb9qobaXauDFzNKgC7/P21IkRGrWI24/dyOtfeRezexaotdoQJ0SSE9cSUEKEIR0NqQGSjUDnpMMBUjh+IxGi3K4XiJIETYZKIrLNIa0oJhv1wWTo0QijM6JIQTZCj/ooPQVZZOthxDqtxTqTpxLNvhnFaJgw1VlgurPOqD8gzyyzuHzCXo6jOrInnjmLYHx8ocHXfMb5uYkhMnYkA2hjF4Zt953nQ9tNlJD8CBa/vG6SKqVot9vceOON3HnnnSwsLJQMIkmSUiMUEYbD4QQTGA6H1Ov1cuK6kEkfNhkMBjQajVLrd1aB74yEMRzkGIpjGK1Wi4WFBbrdLtPT0yXj8ENH/X6tsm5CYR/6D1xdw5Op/Lz8eQSTq2q/FBQyO/fdcIdTV0fn5F1dXaXRaLC4uFie4+yEvXuvalHh1drMh/5cutAnElpZ7v1arUaj0aDdbjMYDMqzFZyT2a/rlchvi1D5Cdst9Df4z5/t975YuiYEwMQE0JMVd2QZnu2sVrtZLvRAj02vdrvDwb3zfOVr72VqdoqkVidOEvKRJpMRqJgoqaHzDHRGvz8kUgbyDEFj0hGGYgVrgZ0TRag4gWGfJBLSYR/JR8DQMnYl9HtbNNo10tGQejpgNEpLbdQ02ihlB3OrrlAmRkeL9HSTbDQEndHtLjMYDL64yWts1I9tv/FBNc4CEJEyDNQhSZFy+9dP4s5K2b2Wdpp8hhQys4mqFGmclj0YDMjzvGQcc3Nz3HDDDdxzzz20223q9foEM/fNZaUU/X6/FAJKqRLPd0zb3fcjRYbDYYkL++V3MIFj6A6Lds+BCX+EiwhysMZwOJxo66tZA367VWH/290L83Fzwncu7iSFkEZYF9e+rmy+ZefqMBqNWF1dpdVqMTU1Ve5i6jPMcFsN90xrTbPZLHfFDP09xhhGo9FEf7hyOk07SRLiOCZN0zJf1795njMYDErLMssyer1eec/1eeiTCP057tr3xWzHxEMfjk9V7+yEMLgmBIDPJDCTOLEW+4uNXVildcZwyzpt65Gil2dM1RvsX5zjyP45br7xJtrNDgk1yCDXxUlYqSbLeiRNQzoa2EPb86FlAsogEmGyEUYJRjXI05GFl+z+EERZTiQxeTZgNBoSYYhrCmUS4rhPnkGcjcg3LkF7GnJFmip0uoFEyh78HsW0Wk32xSm1wy0W2rfx2MIiDz/wSfp9DTJCkhiTZhPawFh7sCt47QO71bPF9Mdb1Ik25RbXBrsfkNZePHlkNX7cADNgt8nWJEmNnaYqCKLqnta6XEDlTP1Go8H09DSHDh3ijjvuoF6vl5qgm8T+OQNbW1slk/cnk890nQbtvgVMYP8Of/bzHo1G9Pv98r5TPpw/wTESJ8QajQadTodHHnlkQtj420OETH47vDjE0ENGF/oOwnZ29dtJ8svjfzPcc8pBJq6cDsrJsoytrS2GwyHz8/M0Go0JbN1XCFw7O0btvh/HcQmzhXi4335pmhLHcVkO/33fH+T3jbMenfDI85xOpzMBwbj3wxXPvpYfwkOhhRa2adi2V2LwocP5udI1IQByo4sNnL34bmModVyZbAynxWaZjeuNyJhrxSzNzNKqJfYYxnRQbItgG9QuAOqi0wGJEobDLtPtNlmmx5tb5TlRLSHrD+35xLlGjwyJZIAiG6WogqHU6zXSzBAZu+gsz0cohgw31mmojDzVkMwAijw3hdM2g1FOLakxmwjdes7iTIujR47x6OceIc0ss4kYn1PgsNZQM5jUNMbapYhAcS+Sy5khTE5ULfYMZq2iHRlQPoVaf8jM/Pvjfh0zaa018/PzLC0tUavZA238826d867f75cOz16vVy4I87VO5wB0zD5JkjIvH3t1vgBfq83znK2tLTqdzkQfuHK69PV6vdRMFxYWOHjwIE888cTEOb2h5rzdJL8cupsMDfX/hox+u43RdopCDbUKigl9PA5ac2V0Ybru5yw4V+88z9nc3KTZbJZ5Ob+OP458h7k/xks+UigWjvyx7yw6F+rrlAI3Xpxwd8LVhYxmWTah+YeCz+8Tv3+rrIOqZ37fb5fuJeUEditljTHYiMtioEdqfPh7Hm4PYPf4aSnDK246wu3X72PfnoPEtYQcgx5ZGMFFDWxtbZSTU5MTAefPnaE1bR15udY04mKLBK1JEkFn1iLRWcoo1dSSFrm2mLJSQiQUxxQoVLEorREZ9NoK0WKHrJ5Qr00RxaCHAxLdAxGyPAdJ6DQT9i8krK4s0Gy2STcHE+1SBZ2EloFPURShy83vJtP7g9Mf5BZyk8sijnaCfLw6dMi5Mrl0fgiqMYZ6vc6tt97KDTfcwN69e8vFOWmalvu7xHHM5uYmeZ6XuKxSikuXLpWhg75D2E0qN9bSNKXf79PpdMoyOG0xPJpRKcXa2hqLi4s0Go0yrQ8fuHStVou9e/eyvLzMuXPn2NgYO/qhul/9NqnqV7//XB7bWRHOV+DS7TRu7PIN8w+1/9CCcUK41+sRxzGdTqeM1HIC22nnAO12u7zvhHbV/k6+hu+CGkoINhASzqpzPqGNjY2S0WZZNhH95b7nrydxPgGn+fuCqEqBCgWC66cqyM898+9tZ0FXzf/nQteEAEAPvT1spNQGMqJyKwhi+1eTY0xOZBKSGG7cP8vRvR3aTYUxffIsRWdWA86NJml2GAxHkBnqicIMh2RookhotOpEWcaICKNT4jghyaFORpoq8uHA7s+fGYYbKyQzC0RRTK4NEsVECjJtdxrNsxF5FqHJqTUsntnszJA3ioUqjYx81CPqd1GjdWKdkegB9PuY3jqDQdc6q4udQw2AzhEVW4EmhqgMfLJQUISQCxijAHcgjGXniBSrhQtIzRtgvtYSFQfdJJEB2dndQJ2W5TN/H5sHJia8Y2ZJknDDDTewb98+Go3GZVqcs+ic30QpxXA4LAVAvV4vGbObzG5LBjfJHdPo9/tlCKCblK48DipywqbT6ZShgi69syTCyKHhcMhgMCghjCrnbZV2VzWpwxBPl85nEj5TcddVawh2gsItFq6EVzsLyUE/WZaV7ejK6MMxw+GQfr9f5unCe8H6DJxAcIzeCc5wDYu10uv0er2JNvI1Z2eV+f6G6enpiXHiW1uuXv4KcncvXMnu13+7e1UMPrSsQsioyrJ4PnRNCIBE1uzeNqIRSdB5seueeEcIes7h9tQst95wOwcW5mlKRkP6JFqTDbpoBKMSssxuG5F2h7TaHVStzvrqOUw6JBmtEJsRc4sHyZI60fQ+tNSQTKMZko4GJKLorm/RmpshShKmWzV01sXoDkkUkQ1GUI+J44Rur8dgOEJMg9pwQH/zAguNBHSK5CkmStAqRmrTrPYG1E2C0hl1Zdg/pdBH5zlxcoqzqyukejzonBNXGxv1lHmHyJA7LWFy/3QRTxPDnkOgjSnDZUVFZM6hht1EzhR+lp2GCnwKI33gcu10amqKo0ePlgzCTVbnxPVDNUWk1MTX1tZKR5/WmqmpqRJagDGm62CiwWBAkiTU63VarVbJ5B0zdxu6OSexLwis9Te52MdZIk7gxXFcLiQ6ffp0uT7A19Z9Ju5HC7l6hgze0ZU0yipHuxOKO0n+N/zonCqG5e6vra1x8eLFEkv3MX8nPF0fOMvNKQ9TU1MT2r5zxDre4BQL18eufx0056K6qqJsOp1OqWQ4pu/K4Sw8Z7H4SoPWmunp6RIKCpl4CP2EY74KtgqZehgd5vdlVTs/F7omBEAUOYecBnp275wowkSNccN5EEVuhK2tS8xdf4yZRk62eYlBr4skhVmWNNBGIVpRb04VUSExiYroDfqM1s9isp49OL5TY7ozTRS32FhZo9GAJBYGm+vMtGfopynp0NASYX1tlanFlnUCNRp2Ra0RpqamQBl6qebixVXyjadZO/1Z9r2uzqB5mIX9h4gsZ6YzMwtpk6i7QX+1TzYc0WkIr33Na/hPf/UxBoMtr86T5LZAMmKfaa0tC69wcmqt0cX22gbKPZLyXKOLPaONsWGjKrLnEOx0tIg/QX0NNoyiKetXMMXrrruu3LhrMBhctqDJaWvOcessgLW1tZJZT01N0Ww2UUqxubkJWAHjHMXD4XBigi8sLJRCRWQckdTv9xkMBvR6PbrdLpcuXeL222+n1WoxPT1d1md2dpY0TctyaK1ZXFzkvvvu42Mf+xiDwaC0QsK6hw5cP6ol1OpDJuH7OfwDaGC8dmCnD4W5Wrx66BOo1+tcf/317N+/v+xLoIy+cli8Y6btdrvsmyzL2NzcLB2vTqN3/R7HcRnt4xh9q9ViY2Oj3KCv1WqVAsblmSQJ09PTtNttOp0OWmv6/X4JC4VbbDhh5MJUNzY2yi2mq/D4UEkInfxVgtq/H1p9obXnt+/zoWtCAKB6KEWxCMuZYxoRb6ApAWNXDMsgo7fyJE99Qbjh0HWgt2A0oNMxSJTQH3QRlTEYGDY312nPzCPZiHT9Amq4zGgwxIy6bKafY/HQraQrG6QdxerGOsnagKX9BwvH3wYDoN2aI6vP0FxqksQxMCTrd1GtaUyzRaQ0tV6fje46z5z8PMurjzOSQxwcPkZ7z2PM3Ps6hjPXU283ULpGZjRJo0Vnbj9pY4pGNiLuRFxYuYsHHv7bcpAbldsoHa1BjwN3isPAyLGavdE52hSrJQXy4lhN9GiMs6MgKzaH02nRlgDGCoXMkKc7u6Wwg0j8we8vvPHTAeVS/NnZWRYWFkpt30EubltmNzGnp6dJ05TNzc1S83NM2E1Sp+E7JuM0SzehnKXgYCM3qX1YQinFww8/zGAwoF63GwYeOHCAm2++mVarVWqzLjxwZmaGRqPB1NQUU1NTnD9/noceeqiEsXwc2yd/YZP/3A/p9J/777nn/n2Hi7+QW0X7FklYHz8EVCnF4uIivV6Pra2tUuNut9tlX8RxTL/fLwVoq9WiVquxsrJSRle12+3Sj2CMKR233W63FCB5npcQofMjuHZygQPOanPjZDgccuutt7J3714GgwEPPPAAW1tb1Gq1EvMHSviw1WqVCker1ZqAMn2B4doohH18hl4l2H2h4vtWfAViJ7ZuuSYEgKixViDKoJTd4niiAQQkF2KTsGemw+H5KRaSIRvnTzE1U6MW1xhsrqIlJmlN0+vWaE3Po+pTRHGDte4zyLCLWT6PFkWeZfSzjItPf54p1aLZnKfWaJLomFwrpNZiut2mno1QErOxscbCsRtg0CPrD4kbHWg1odFAm5zaVJOZPXu4+fY7+fMPn+bJ3ia//3vfz6GFKX7we7+ddPEOjv39f4xqzyOqxmCwQRTHIBGbm13mkoj7XnGMSytP8dRTJ+kPtrCcnnKPImPGC56MFNq/zonHvNxuqFFsXif4jkUbImqARIWagyLPMzK9+YL0rx+a6Q/40Ayen59ncXGRPM9LuCBJknIvfzeZp6amysHvFumsra2VDGdra4uzZ8+WDjwXfuiYTKfTKYVGmqYcPHiw1PparVap5Tm8Ossy9u3bx/3338/Fixf5nd/5He644w7e+ta3cuDAAe68885S23Ta5XA4ZGtri3q9zl133cXFixd5+umnJ3wFoebv/z+0CMJ7rt1cvUKc2393py07J1CuBEM4huYEMsD6+jqtVmvCKesso62trbKfYWy9tNvtiT5xvp6wrr1erxQS7n0nGGDyFDMXMpymKWfPnmV6epqv/uqvptlsluPglltu4eTJk6ytrZUOYcfUnfV36tSpMhTVdzq7cVbVRqEg8NuqyidU5S/YLuz3udC1IQDEX7E6eSqUJdswjUaDpqmxmCww116k3mxRy4YkJmfQ7ZIbxSBLyXs503uWSOMhUVQjjxUmrlObXUIPB6yePcHW6nnOPn2S647ewv76BeLoALoZEyd1EIVRNQa9AcN8QKRG1PIMukOyWpNoukaeQqQNGGWPbWzP0JSE3soyZmEvv/q+P+Bp9sMX1nnvJ3+B73vjdfz44VcQHzxKMr2AHnbReoTKU5TOWfncJ1GNNlu9c/RHFyAa4vZHsk1gUBLEcxsDJp+YCHa5nPMWx+VEiSLBoO1B8OJjxdaq0gx5oU4E85l/iMOKSBniOTU1xezsbAm/iNjFVE6L3draYmFhYQIPjSJ72MdoNOLMmTN0u13OnDnDvn37StzW1+ZduF+9Xi81wuFwWIZ4+uGabpVvlmVcd911PPLII7znPe8hSRIeeOABfvu3f5t3vvOd/PiP/3i5T4xjCC4C7fTp0yRJQr/fn/BlOKpaB+DoarHePubvO7x9RrLTzB8oI2h8zbXKJ+EsMmchuYgfF1Xj/Dv9fp84jllYWCjrsrm5yebmJmtraxw+fLhksC5IwOXv4L1OpwPA5uZmOR7m5+dLQeysN7e3fxRFpQJw7tw5PvjBD/KRj3yEe++9l7e85S284Q1vAODzn//8hDaf53mp+R84cIBLly7RarVK69TH6B35q49DZ/12CoBrXz8v93cnfTrXhACg0GhFGdAe1oUGFCIR9ahGQ3W4e/9RZpp1YhUjwy552mNja4AQc351nZmpaVrzh4nzOsNhnebUIvML8ywdrlPPeqxOL5L1z3PmiQtc2uohTz3JheUNbrhDM7d3P4decTe9UU67FRFLhugmWTYiarZZO/sojem9qIUFVJ5BfQp0jjZ2BXNUr7H3rlfzXTfdyempu/jwM236m8ts/uVv8r6/eICFn/+v+a53/lNqt7yOqNiziOGAUW+D3kiobxznh77mXt7/0R6fvXgaoQ846W8XbNnmEnJVHA6jDJJ7JrhRlONDWYYjWltbILaTN1a+ZWCFWFIzxMnOCoDQaeX/DfHNG264gVarhTGmxPbdDpsu2mdpaak0rxuNBq1Wiz179qCU4umnn2ZjY4MLFy6wvr6OUnZFsNtA7tixY6X578eSN5tNLl68SK1WY//+/cCkY9M5dO+5554ScnrjG9/Ib/3Wb/Fnf/Zn/MZv/AY33HADb3vb2+h0OuUkdsyvVquxurrKW9/6Vn7zN39zQssNQ2N9xuD7Saqc5zAJJfkOZp8xvxD7PPnQQ5UF4PwwLmLHwWqOQTqG6GA5pVQJDbm+cRh96Pep1+ulINnc3CyFqhs3bkuPRqNRnhUwPT3N0tJSqUTkec7MzEzp0D937hwnT57kV37lV7hw4QInTpzgT/7kT7jzzju58cYbOXHiRHlc6NTUFO12m42NjdJpfPLkSQ4cOFA6k6toOz9MaK1dLb1PLxkLwA5Wy+S2Mylj6hyeWWL//D5iFWF0j+7GJv3+BoaULBXIhmSjERLXGUiN+QPXU5vbA7Ua6eYKK+dPsnrqKR4/fobPPn6a/rDLysVLHDrQ5/DmORqHFhh2V1CqQU9rOjMdavkIbQz1KKW5uADUSZcvEeUZW2uXmNp7EJEaarQJccwIDa0pfuxdb+G7loVvftcPkxp4xatfzx/91d/yqqX387rFFnnrCP1eFzPqs3XhOOvLm+ypD8hP3c8/+YZ/wM/8/h9yYXAS8J3B1pS2i+MMouyaBQREKSJ1eYwxgDsHwJqmHuwCWD4jkBni2s4KgCqmFT6r1+scOnSIpaUlgFIjdFsoOMed8x3kec6ePXtYWFgoV9c65nHq1Ck+85nP0Ov1OHfuHAcOHGDv3r3Mzs4ClGfDzs3NlbHnYH0J9Xqdfr/PpUuXADhw4EDpdHTfPnbsGD/5kz/JAw88wIMPPkgcxywtLfGhD32IhYUF3vzmN5PnOaPRiK2tLZ566inW19dLIfCOd7yD97///ZdF/WwHAfgCtKpfQ8FQtTNnFTa/U1Sl/bt7bnGX7wh2C+V8P45bI+HudTqdcudNh3MvLy+zvr5eWhH++ot2u40xpgy3dZabE4zdbpckScroHncusBtTs7OzTE9Pc+zYMT70oQ8xNzfHddddx+bmJidOnODGG28s13S4MbO1tYUxpvRXuY0A3V5Grk2qrKKQtuubKr9AmO9LZiWwWM4P2yxGUkqh6op2q8761hpNVaPXP0O/t45JNWnaR+cxM4uHaHZmyJIOjbklUhSD5bMkpPQvnKc23OSB/+fP+fzj5zi/Ns3mesqBhYhBGlOvdWgmU4x6W7RnIuLONHmUEJk+MlqzW1C395MnmqjWhHqdKUb0V58hy1Ma0/OozFAjhrRLalostYc8+Js/zT/63n/JF44/wNTcq0hmj/L4Jz7KdXd9LSI11rZGnD19kRNPPMx9txxhngRFl2/7xm/iPX/4K5Nx1hPjx5TtZZvPaX/esnTjTEgXBWpXW+OFl2mdAsr6XqKdjRbZTpg7chi9O4C9VquVh4C4qA239XO73SbLspLxLy8vk+c56+vrDAYDPvrRj3Lq1Ck2NjY4e/Ysc3NzE+GeKysrzM7Olg5e50D0d3d0MEQURSX265yJvlVw99138+EPf5h3v/vdPPjgg8zPzzMajfjUpz5VniC2sbHBxsYGJ06c4LbbbiPPc6anp3nLW97CH//xH084oqsw4jAqpGrdgP+Ob0GIyMTWBjt9zoPPzKqYv4NM3Olbrp6O6bqV1c6XsLm5WW6o50dXzczMlONjZWWFlZWVMrpnNBqVsI6D9zqdTqnVr62tlVi8ExZzc3OlX6nf75dlcBbX3Xffzf3338+pU6d4zWtew0MPPcTHP/5x7rvvPmZnZ0s/g4iwsLBQ+pIOHTrE8ePHUUqVFmkIz7l289ciOOEcpguZfxgBFKZ/PnRNCABjBLtzpoxPeyysgUxH1LKYPc0F2kkCgx40ckwWs7E+ZHV1naOHD2CUjbrI4jadxcM0EuHUqaeYatbJNs5y4u8+znDtHA998q9536eewvRibjlwG5neZGlphrgzzezSXhpT8+Rij0iMNs+ysXyGdmuGXDpspltMzR6ku75Fb22di898lksXl1O/SLwAACAASURBVInjGlHSYt+BI3TmplhYOkg6uEC+uUZtaooP/e8/y9/c/zk+94m/5pbXvIqDr7yN7oVTnHnmLBvLa2wsb3Dq5Beo9baYuucYtdqTHLrtzbzipvv43BceZGi62B1/PCcgEVrn1i8Q+SsIxxEiRhUYfHHMjDGmiB/1mY+LPQdh5/cCCgd1GAExNzdXTkin4a+vr7O1tcW+fftotVplFNDevXtptVqcOXOGWq1Gr9fj+PHjPP3003zqU5/i4x//OMPhkCNHjpSMYGZmhsXFRebm5gDLDLvdLufPny/3eXeRRqPRiJWVFc6fP8+FCxdIkoR2u83evXvZs2dPGXra7/eZm5vjve99Lx/84Ac5ffo0b3jDG9izZw/nzp3j0qVLrKyscPr0aR5//HHSNC0hpOuvv55bbrmFxx57bNvoHN/H4WuIPgZ8NYehE2oO695J2s6qcwzKOafTNGVlZaXUupVSpXCHMdS2b98+2u12CVctLy+ztLTEiRMnmJ6eLvNaXFxkdXW19OG4U95qtVp57Y6QdAqDiJSx/lNTU2WaKIrYs2cP6+vrpWDSWvMt3/ItPPDAA3z4wx/mjjvuYN++ffzd3/0dS0tLHDt2rPRXXbhwoWzrer3O4cOHWV5eZmtrq1Qy/Igd99tuZX5oMfhCwO9bX+t/yQiAcoWoTicaCxPRrrU4OneAI3MHaDIkabc4e+40ve4ATI3WVIdM5+Rk9GhQTxqsnzvB02nE0sHDrJ56jI1Tn+VVrzjGO3/kvTx0JuO6676S2b/3X/Kp3/15+hnc1zrG9bffbrWUQdcexpJ1UbUmavoQI5OTZqCjGZ555gIf+dO/4vGnztNozIKu093aImtcoBmfYWEm5s1feQ+H9tSZqtcxwxEMl3n1bfu59dbvpNmIMEmT1qF76D91ns3uBo8cP85ab4CJO3zuyc9w5LoDpMN1vvLm18PmgE8//WmGKifyNQO5PIrEkt1BycFqjqrgA/d3JwbSlfq2Kga6Xq8zNzfH3NxcuVL30qVLrK6uImJD6xzzcouDVlZWOHPmDAsLC4xGI86ePUu32+WJJ57gox/9KCLCK17xCj772c+itebtb387N99888ROjBcuXCCKIubn58sFPZ1OhwsXLvDwww9z8uTJcnI3m83yt2/fPu64447y0HkXLfKt3/qtbGxsMD09jVKK/fv388wzz7C+vs6jjz5a4sQrKyvceuutANx5552sra3x9NNPV27U5uP2oZN3O6brhIK/4M7vgxeKQmen2+K5Xq/T6XRKGG95eRljzEQEl2PUnU6nXGsxNzfHvn37OHHiBPfccw8PPPAAjz76KA899BA33XQT99xzD2fPnqXVarFv375yLx/nEBaR0moDC+XNzMzQ7/c5e/Zs6ZR2VsaRI0fKRWqDwYDz589z4MAB3va2t3HhwgVarRZ33303q6ur5YJDtzrZhQO7/aeazWYJOcGk5RXCZb6/ZztLucpC9OklBQHleXb5yictJERkvRG5WqWrl0lNzNGbvoInnvw8Tzx5nDzv0mnW6MzN0dtcx2hhQIpqznHhmdP0L5zkmeMP8m9/5/d54FSfA9MLXDx/jicef4x3/dA38Yk//FPe9g9fy4zESBwz7G9RSxLSeIpWY4pmLSfPBqTDlNWtAb/wq+/j9MqQrDbL6hOPs7q2QrNZp17bi5Ia3d4qf/RXn+L7vvlevvH1ryFdnKLdSaiTEPe79OM50pkDJGQcPnoDaxcukhnh9DNPc8P+veyfj3jixKe5+eY3MT1a5/YDB9gYLHN+c5PeaJWykbbbvtnYExJEQJt028HzpaBw9a+vuTqhPxqNytC+6667jjzPOX36NGAn0J49e+h2u+VeMI1Gg5WVFS5cuMBDDz3EU089xUc+8hFmZmZI05T5+Xl+8Ad/kI985CM0m00uXbrErbfeyvr6eilInDPX+RcuXrzIiRMn+PjHP87JkyeZnZ3lxIkTZRgo2EVk8/PzvOMd75g4n9YxHLdPvFKKubk5zp8/z9raGsvLy+zbt4+trS0ef/xx7rvvPqIo4ujRoxOOTz/6A6ojP3yN0dF2gsGleyGYv2NM4WplfzsF59zNsowzZ84wOzvL7OxsuUV2rVZjZmam9Ms4yMcYw2c+8xnuvPNOHnzwQfr9Pq9//ev54R/+YR566CEee+wx9u/fPyHU/3/y3izI0vs87/t9+3f2tffumZ7BLABmAJAEKYggQcsklaIjVypWHLLKlcVKUr5ISUmllJtcORe5iK9clbAUueJybJcl0bKdKIotiaICEYZIAhRAAQPOADPTM9M9vZ0+p8++fOc735aLM+9/vmn0kLYwcKGUf9UUwe6ZXr7lXZ73eZ630WgQBIHa5uX7vuo60nDTysoKvu/T7XZ588031e6Gz33uc4RhyP3799VMQdd1zp07p+YIsjIS5jYflUqFer1Ou91W8FClUlGMozQdVa5Z+n6evJY/7fM/6Wt8lPOJSAAPoQiDuR20ThInaLpGOEtwshAFffxRl/FU49lnTWzvcI4zkiUIdaYjDztnohMSTkNMUyM6nhD0D1l46lO8+Q//iHwS4ZYNRq025g/+Hr91Pcd/8PkXsaKIiWmRDIborguZMhkjYNjbYzQaUCws0BkF/MvX3+Ffv/0BteVVpsMmtcUNzIUr6GaRi8+/RL1epr2/xfY7f8z/9Ov/N889/yIXM1OMbASZCoZuok1nRL02cRLgJSad0RA7v0TvOOH+8YTpeErkdbnUb6FXctSCPM+vrHNT22evN8MLJ0RaRJI8xH4ffRHTm4ekkjzhVY4BhPCAZfWkOMWn3Vc4vVIRRehsNmM4HBLHMc8++6xi/RQKBeI4pt/vUy6XsSxLUf56vR6dTocrV67wa7/2a5imSaVSIQgC/uRP/oQf//jHvPTSS1y+fJmNjQ2Oj48VTixBRqAJ3/e5d+8ef//v/31VBQpL5KWXXuLpp59WkM5rr73G3/k7f4dvfvObavmL0AqlI5CZgsAY77//Pu12m263i2VZvPDCC2QyGer1Opubm+zs7DAcDh/h1gMfuq9yHU9iwemqX/59+u9/XANg+HA1Kz+HVN+SJATKE4GX67qqM5Ll66K7mEwmPPXUUzQajUdsmN98881HtACu62LbNqPRiHq9rjowsWuI45izZ8+qyn82m/H+++/TaDSwbZtz584puObdd9/l4sWLLC8vK/iq3++rRLW8vKxICTLL6Pf7ynU2CAJyuZy6xyIoFI+pk5TZx12/k7j/af992r//KOcTkQAEFpCNVUmioWk6eqxTcB3cOGTY7pGEEzzfohw2WM4ZHJbKBN4ExzVIkojI92gNRyRYuLMMpu9z3LzL7/+/7+EHOoW8wXQ4JozG6FHIl89c5L/56/8+9VKG1u5dllfPYltFuq3bON6YVn+EnXX5/d97FWflMt/83/8hhm7hRzFPX3mO7727jV1dZ2frLX749hucXa1ztPUWyaxLObfO3/31f8T//Ct/g5JrQ5hnMB3iZApMhy3cYpHVsxe58rmQO80/xLCyvPPje3z9r/4cA69Pu3kLe+VF8tkMZ0tV8qGG5/kcRjEBERrTRyrCk2rROEnmDP9T8OI4ikkeGOIpROlj6hROmwEkSaI2enW7XVWNC3ady+UAlBJ0Op3S6XTU8E8gld/4jd8A5ljyZDKh3W6rCvQb3/gGlmVxeHhIuVzGdV183+fu3btKXOZ5HsPhkN/6rd9iZ2dHrX5sNBpsbm7y+uuv84d/+IdUKhXu3r2rfH5+/dd/na9//euKay4wUr/fJ5/Pc/nyZfr9PltbW5imyfvvv89Xv/pVlQgELlhdXUXTNLa3txU98TThVpoKehrz5nHX+uM66ft40n5CrBek+h8MBuRyOXZ3d8nlcqoyzuVyD6HfBzMBx3FYWlpiNBqpQC3JdDqdcvv2bWq1GktLS+TzeXq9ntKMyH4BTdMYjUYsLi6yu7urqn/btnnmmWf40pe+pDyk8vk8nU5HubZubGywu7urTOBkYC1FwXg8pt1uUyqVqFQqZLNZZrOZ6vJEByIfF5pr+j7+pHMS9z/tc+kZ2pM4n4gE8OhDPXe21DQdI0mwoxi8MaE3Ai3g0qXn0LIFsKscD3eJR8csLhdoNPZYqq/imCZ6EhD2exzs7fKDH3yHTmdOHfOikNFEJ+8n/O1f+a+oVQxMN2RmWtTLRab+mP6wQT5box3ELK0v4o37LG1e5rd+/09IwimHx0ckpsPde9u4us3k6H3WMi6Twz5b96cYsyGxPyQq3efH2lm+/YN7fOVzNRafOktxZZ0kiEnMB4ZVjsPmc5f52bHOt3/7H7F9uM9UmzCJbYKoTTIYoBuQK2RIgpDPP3WeG50mN/bvM3vcYEibX0/dNCB6uCg7/fAZhjF3Ck3m3cHHeV/T3/ekZ4rAAXEcc+nSJTKZDLlcjuFwqCiDAh9IkOn1ejSbTb73ve/RbDbVSzoYDLAsi2984xucO3eOSqWiBry6rtPpdEiSRA0VM5kMN27c4O233+b69etKrdrr9QDY3d3FcRwlRBOhTy6X4/vf/z6f+tSnyGQyCkaQ5DCbzchms7z44oscHh7y2muvsbu7q7qdtHI0n8+zsLBANptlb2+PnZ2dR2Cb06r30wzCTn7uJP7/pLuAdOUqw860xUfadE/4+pVK5UPP62Qywfd9isWiUtseHR2xu7urEsV0OuXmzZtMJhPOnz+P67oYhqHsIaTyHo/H5PN5stksq6urKkHIz5IkcwdZ2eo1nU7xPE8Nim3b5v79+6rLTHsWjUYjLMtiaWkJ0zQ5OjpC1+drSsXeYjKZAKgORToRYTiJnflp1xEetYg4LcCnk+7JgfFHOZ+IBBDGKdxTj9EiC1MHF4uybpF4LRJtjGHWWVnewExM2q33MLVVjjG4vbXN2ZUV/NmYcd/HjoeM2ofobpkXX3iFZy8Mqd/o4Bs5rl69yktXzrGxvkSn3SKTcfC9GVrGRI+mzPyQqemjBR5vv/kmP/zem4SlC7z2+r/GsbJYmkav1yQxEvwoxjAsJrFGoCWYhkEyC0E3KIcxg2aDayOXv1x8Cm8yxM3nMDIF9MRDm81INB3LMPnMZ57m5/+jv8k//8e/xp98/31+4WcvsnWrwVM/a6HH4EchxVoO4zhi6uYYFMrsDhKCJCTWE/Tk0a1EJ6vthHmYF7ggjoNHksJPGkR9lHPagFnTNIXFC82zWCxSLpcxDEO161EUsbW1xfnz5xWuCyiYZnNzk1qtplg2m5ubfOMb32AymVCv19WLWKvV6Pf75HI51VkcHR3x/e9/n1wux2uvvUYcx6qzkFY/HYTT9tIAx8fH7O3tsba2Rr1ef+T3ki7Gtm1+7ud+jrfeeotvfetb3LhxgxdffJFms8nGxoaqfkulEgD1el1VmGmriLQg6LRB/kk4KH0+Lvjn5FBffhZh07iuqypnMcorFAp0Oh31804mE1VJy/xga2uLg4MDFhcX8X1fzVGq1Spnzpwhm82qxFAulzFNk36/T6FQYHl5WXWVxWJRQThShYdhSLPZfCR5CXwTBIHa4iaBXzyHJEFomqYU45PJhKOjIzKZjEoKcv0FAkySRFGQ5ZqdLIB+0jub/hg8msj/ws0AwvAh/TCOwMAgmyQsZbPktYBZ7BFHGsVSgU63yXJlk/pCBb095M7WPb7wqcv0Bx2MGCwj4rhzQLG0xPKZi6yZOWI/4PzlKZNIZ2Ftg+rCIkkwZmVjhU7rgEopz+0Pdnj66qepFup4SZP+0TZf+NlX+L/+z3/Fu28d0Gq1WFtaJI588lmXyXQ6R9HjeP4z2xDHGrplkddm9HojWHma3b5BnD8H5hDdztIbTinmc1j9HloYg2ORyYR84Suv8MM3/4hb194mfLnAzv07fOorNt1+iFssEAzaOLkCK4bBQa9DUzcJidGJSDSd+IEttJYKuskDmwhNm29Y03R9vnch0dH0h9J0eLAm8gmfk2pG8WgXu2bxgRGKoLwktm2zt7fHs88+S6fTUbhxp9MhiiIuX76sYJyrV6+i6zrPPfccURSpylo8gsSmuVAo0Gq16HQ63L17lyRJ+M3f/E0ODw8Vt1sUyOmgmg5wMp/QNI1ms4lt28r3X2wjBoOBgjPL5TJf/epX+cEPfsD169d59tlnuXPnDlevXqXX66mEIYwomTWod+HfgPMttMv09f44WT/Ah2il6X0HlmUxnU4VnJbL5RiPxxweHrK4uKhEWZVKRdly+L7P/v6+onfu7+8r9bewhgRLl4AqJm5i1tfpdPA8jyRJlC5DGGSTyeRDATa9YjKTyTAcDnnjjTd4/vnnVRCXmY50OvJvFhcXGY1GHB8fK1sKUanLQpl8Pq8EjUIdPe1enmRwyedPJvbTYMEncT7eJ+Xf8MRRmTgqE8wKRFGGMHEpmyVqZsRs2MJKXHLZ0oOWq0ovmLC0+gWOeg08b0qrdUSczBiOj+mOjtGcCuWNq+jlTYzyWeoXPsXlL36ZZ7/wcyxf/Rwz3cELYeKPGXaP6A2GFBfX0SyT1uFbND64wTjR6VHhc1/7ButPf47PfekrOMUiSTQl49gQPcQ7TdNEjyN0HVbW1nGXL/Lf/i+/x+e/8nWm/SOm6NzePySZ+mRNE2ZTHNNnOGzN/XeimEvPfYr/9L/8ZUqLNaYYHDU7vPvOWyTWfOZg6AmzMMaxXNaLJXRxAw1jYkxiTIJIg8RUfySAxXE8dwlNYqIkJkEnTjTiRCPBVH+e9BGMWLBtaZsdx1FQi7hnCmPj/Pnzik99fHxMHM+XwXQ6HcIw5MqVK5w5c4bFxUWuXr3Kl770JT772c+qQSDM1cStVkvhthsbGxwcHLC1tYWu67zyyivcv39fccPFMVQGuieDbRAEnD17liRJ+NVf/VVeeukljo+PVYchpmASgEejkaIAPvfcc/ziL/6iYq3cvXuX27dvK5aMBJpcLqcosR96Px6jAoaHamEJID8JPnpSJ808StsmC89egrfs1JXkXigU1FpICb5C3xRmVS6Xo1QqsbS0xMbGBgsLCywtLamuUZLG9vY20+lUWTBI9T0ajbh16xadTucROq38zBLQBbYaDAZ85zvf4Z/8k3/Cl7/8ZUU4EOivVCopjUHasrpQKNBsNgnDkGKxiOd5iv+f3ivxOHsIeTdP4/WfHA7Lfz8uiXyU84noANDnWK1mgK4l2IZBMetjEWMVK/jDLqY99/YIvAnTbszKM09DZOLqGqNpwO3tHQpmQrFQo766TmxksByX4tI6iW5hWQ7MEkZDj9HYY8EyGTb2CRKNfGWJ/qTPB++8Ti7rolfOkNML3NlpUCoukMvfY9KyaE8shjODrtdF0xIsLQOEaJqOps8x69bhLqWFS/zDf/B/MGreYfHcFd595wZfuFKn74dkMxpEAePIx9Qtpv0uZq5KuWLx8pe+yNX/53lub23x3NkCs9Y7sHEOkgz+pIdhzXcYF/JVCLbwDRcnGBCFD6pVNBB7CCB5IOzSSIjjhzDRIw9PLMwgeNL1QLqClupQWB/CzRZ+/9LSEv1+n4WFBWW2NZlMFFe+UCioCjJJEjY2NuY/sa4rfF7w1na7raq4XC7HBx98oGAgx3Eol8vK7Gs4HPLjH/9YcdflhSyVSvT7fXW9ut0uFy5c4NVXX0XXdc6fP8+5c+e4f/8+a2tryntGoCopDlZWVviFX/gFvv3tb9NsNikWi2xvb1Ov1xUUIh2DOI+mK770vTrtv0+DCz7O4C/fC1C2F3JfBTKR2YtU9KZpUiqVODg4UH5JMiSWRCDJ0HVdqtWqSi7lclkNeGFuHZEkCevr6xQKBQ4PD1XydhxH8fQHg4GCdgSSkg5REoBhGJw5c4YvfvGLXLlyhd/93d+l2WySyWQol8tK9Ce/m8x3AFZWVoiiiO3tbRYXF1X3WCwWGY1GAGqTnECdgOpYTrtH6TWT6ZM2kpNrd1qh8uc5n4gEYJul1AXRqOkd3EEXw03QjRjf9/Aig2qtyGQWsVhfoVSs0Tg4pN1rMvWHFHI57OVFNLdKYueJ4wmd9gGdXgs3W8S0sgynEUEEjqER0MW2oZits3/3JrabIQpNcuUz7Hd9slmTUTR3Hnz+hU9jL49pNpusXn2Zo0abem2J7uEtJqNdsqZOqCUYBriuzeTwXQq9e/zH/8kvM01cxv0ezY5DPhsQ+jqDYRuzkMXRNFoH+5TXNJxSFbeU56/81f+M3/h7/yP3Gwc8v7lJ+/4W5fWnMEtLWMGMnKPhGgln6xs0Gk1irUCYzGmzcRxjm85DEZH+ELfWooer9NAftWSWvxP4TzYBSBUsFay8SFKxTSYToihieXmZMAwZj8esrKwo9ohs4CqXy2SzWQUfNJtNZR1RLpdpt9sMh0MWFhbUCye4bxiGdDodpSK2LIvd3V02Nja4ePEinuext7enfFwKhQIHBwf0ej31tYTud+fOHba2trh8+TJLS0vs7OzQaDRYXl5Wv4uYzXU6HVW1Liws8Iu/+It861vf4tKlS8qwLE0TFCihUCjQbrdVgEwH+JPYu3RYcn5asniSRwKVCL5k6CvBSiieMs+RJCD4+Gg0Uswn6QwF1xd8PkkS1QUKs0iSjcBKQicVdfba2hqtVksFbmEQCQFAKKiapqmO4eDggP39fXq9HmtraypxyPUWogKgnsnZbMby8rLaHyDwnyQI8ZCSfyeGeGJe97hh70n4UYoDud7pJTVP4nwiICB4mBmzsUc2amExw9E0LEMjTiIsK4duahTLFeysxeHOFp/57DP0hwMm3gxNzzKaGvS8BCdfxrELZO0MehhjRQHeoINlRFSqWTbPruH7Xbxxj6Oje/jTA4JxCydj42sGz3/qOZrNJtPplHPnzvG9V/8QPZyysVxnsHePqj2lu/cO+qRN3jEIowAiC1PLEPoamdWrXPzLf5Pf+e1/wXNPnUMD1s48xauvv831a1v4ocXUmw82TaB/eMDk+Bj8kGwpzzQMCTHZbjTp9w7wB31Cb/7iaPEMi5Cr5zcxKRAHi0RhiSgsQVIlibOQ5CDJkURl9cdPCswoMqMIUZEkLJCEBeK4SBwXCcM8SfxkrSBE4St2zOmqVhgzgpVmMhklBLNtm3a7rfx45N8JfU/cIAeDgar2l5aWqNVqtNttBoOBerElkAvzYzKZEAQB3/72t7l8+TI7OztsbGwoi4K7d+/S7XZVkJBgLS/lZz/7WZ555hmeffZZbt26pTzkZTWlaBq63S6tVksFglKppKwlut0ub7zxhlKuAmoWcuHCBWU6lqaFnqwY04k7DbVJ9yAfEyz8SR7x5xGMHx7CPhJYAbWhSxa5COVXbD+EQSWJXUzVer2esnGWfcvydcU2RH6O2WxGsVjkmWeeodfrce3aNcrlMkmSKOO/hYUFrly5Qq1WUwlHfsbZbMb3vvc9Xn31VSqVCs1mkyAIaDabim48Ho8VUUBM6aSzkSQ2Go0U/dN1XTKZjLpOsgNhOp2qpH5a8k77X8VxrDokoUmn/6RJCR/lfCI6AIBY13Fin6LtswjkTJ0oiRmNpgSaRTgNWa8t8f71ayytXiTp3mdh6TyO6WI5WaaRhlFeQs/kMJIEtNkc79Y1DCfL+lKZySzCzubRoxH+qMdxZ0A+l8Eys0z9gEDrc3T7OrOZzlJ9gfr5M7z+3df5H/77X+G/+9v/G09vrNPvD7j6lb+O2brFP/udf47jLhBNj0msAEtLeOblr/PeG2+w99Z3WV1fpZ7X2d+7xW/9gz/jsz/zEm7eZDwLKDhlDDdDXo+4f3+bIApxS0uUcwXW1i/Q617n9Tf+hP/6heeZDA6xlnXCyRA35zJLbOpZA9deYBJ10LDRHngnxcwFdPPzEA7SYn2+ID5JiJi3v0kcQzJ3YYWISMt/LPfWNE2lsBSYRSybRUTz3nvvsbm5yWQy4fnnn+fGjRuKu7+wsMDCwoJq8wVjXVtbUy/B8vKyCjDj8Vj59kgF3+v1yGazCtt95ZVX+OY3v0k+n6dSqeB5Hk8//TTlcpmbN28qGujh4SG9Xo+XX36Zg4MDPM9jdXWVP/7jP8a2bVZXVxVkBaggkMlk2Nvbo9lsUqvVWFlZ4YUXXuDWrVtcv36dX/qlX2J/f59z584xGAwUfr6xscE777yjhs3weO+dNMU3/Uc+d5o3/ZM4aX67VOByn6XqFXGX67pqraYI+yQxiGCrVCopaEOG6qKo1bS5Vbj8nrL5SwgExWJRBfuXX35ZdU8LCwsEQcAPfvADLl26xN27d+n3+8pd9NOf/jQACwsLvPLKK0ynU1WASHKyLItGo6G8hOR3l+ThOA5nzpxRojXRFsg1l6Qsz4NAPydtPuS/T96v9L183DPwUc8nIgEEmkUmDljLRGzaPuEwRDczxFFIrz9gGs1wiw6d/ojO8TEvvPgz7DSvU67WiGMXwyxi2CWy2TyLC0v0B11so8DEH7G+/hQjb0y+dolqfo4tNt7/HrPpmGA2ZRiHJPGIxcVlZpFPFIbs3r3JNBjQ9Y4x9IBf+1//Ll9++fO8+cMf8rWv/oe89sffpufFuFqFCxc/i5MrkfhH/Onrr5IZH/P8ahY9DNCCDq/94bcpVIv8ez/3M+QyLrqpP+A9a/NB4qBJGPjEUUin3aI3aTKcDTF0h54Pf/redZ5a3aDgGESaQWDqaGYOy3QII7DsLEn00II2IeUeSoKaKcYh2oMtYmjxnAWUPNgtCehGgqE/edOwTCbDwsKCqoTliFe/mHbNZrO5md+DoZp0Bqurq9RqNfXiiMpShDimabK+vk6326Xb7SoGSqfTIZvNqpmA53kK1y+Xy/ze7/0eL730Em+//Ta2bfOVr3yFu3fv8sEHHyhRmOwB+OCDD2g0GkwmE/L5PO+++66iHQqUJVYAk8lEdR1CA5TFJvfu3VNB48033+TZZ59VnYcMRyVISJdzkiooJ/3xtPNnOvDD8JB7dwAAIABJREFUT3YR/fMegXFkIKrEh6nORSpgofn2ej1KpRLj8ZhcLqcqZfl6AiGlO4haraYWAAlNV2AQgc0EehEr8Ol0Sj6fV7YTX/va17Btm8XFRQXxlUolfvSjHykb8FarpfY9y0B3MBig6zrlcplKpaIqf4EW5d6ITUSpVFLW1r1eT/3uQguWYXl6kHsymMvnJHn8RGr3X6QZgKPBoh3xbG7CbDLBLVbnF8s0iXUDQ7OwdJ1O4wCve8jR0RHFQoU/u7mDbtkkaOimwXDg4Ww6ZI2QYDZloVojn5vjt4vL6wz6XWa9Q/xBl5k3Ua1UvTandXVHHYrFKkuLRbKlNaahQ1wxWVo9Yjzus35uk60bP+SLf+kLRNMRnftVvEmXtXMr/MtvbxNrOub0mHI+y3A4wtBC+scNvvDFlzg8PGTU71Cs1lharjPoH2Jac7sDQ4MomGHZLg4W60sbXPvTH1PKuIwnXXL580RBSNaZD0bz1QozLyLRLCIiNCNVSTxySx9CLpbpqoc21uZJwtDMR2iPhu4+0fuaVvWK/45hGPT7fQXtiFT/+PiYzc1NhsMhN27cwPM8FhYWGA6HeJ5HuVxmMBg88nKPRiMuXLigrCFkW5P4+FcqFbW8e3FxEc/z2N3dVS/sdDrl/Pnz9Pt9bt++zXA45NKlS/i+j+d5nD9/ntdee01VcYuLiwoDlmp7d3eXw8NDLl68yGQyUZVvq9VSwUmgq0qlQrfb5YMPPsBxHJ5//nk8z3vE0mA4HD6yQepxFZ8EAgmeMiA8OScQKOtJHlEyD4dDxXiSoa1QdmU2IDi8XBdJ+IKHyzxIBHIwT2gLCwtUq1Vc16XdbgPzBCNBNJ/PMxgM6Ha7iilkGAaTyYROp0OlUmFra4u7d+8qOwohFcgsodPpqM60UCjQ7XYpFotcunSJa9euAbC2tkaj0VAGhGnrBwnYYRhydHSk5gaO4+D7vkrooueQzhUetYhOz8rk47I1TU6aGirnSQz7PxEJoGBN2dB2MH2XTHUBz/NwM1l6nT6ak8HvH5NxZky8A8aTHjfffZfzF5+l27lNd9AEw2VhdZPFpbldrJ5LqK6sE6IxCSIuX/0U3aNdvN4enZ07BP4Ey85A3KdaXyaIItA9yoUyMfDOe2+RmC71lYvoZh7Nm7CwVOfWzZs8d+XT/OjaGxTdLMeNA9qdIXuHPa48dZ4wnDJL5rTOYr7AhWefZTTssbN1i5CI//yX/guOW3e49t5buK6FrfVwmGK5Do3jJroxZDjqMx4cUqmUqLoxb/zwGhulIu56lfN5H023SEKPI88iMSLM2CE2HsIBcyu4GLSYMBJYACKih7bRGsTJ/H/RjAcaAXO+fPgJnpPL0gW7lepG/HRkVnDjxg02NzeV6EbWAebzecbjMcvLy6ryO3v2LIVCQfnu7+3tqfnBdDpVnj9xHJPL5eh0Ouzv73P58mX29/dxXZednR2lLxiPx+i6zvXr19nb21MV3IULF2i32zz99NPYts14PFbD7DNnzjCdTvn5n/95giBQKmURtcny8k6nQ7fbVcPKarWqLKfFx15mDWkKaXrJebqqT0MIEhjk8ydN406jlX7UI0k8DEOV3IQDL9CQLOUxDIN6va4CudB9xZVT5ivSBRqGoXz7oyii0Wio+U02m1VU0iiKlIis1+tx+/ZtALWPYWtri7W1NfUcik20CO8kkI9GIzUYLpVKTCYT3nnnHWq1GqVSievXr5PP59nf31fVv2D6Ii6UhCNFycLCgmINTSYTtcRGdAonu4C02AsevsuPg4Lk//+FcQNdjRsUEo9ctU5Agj/18Cbj+brFmYfvjegYYwr5Mt39Brl+m4WFOivLq5QKRarlMo5lo2kRxVKRvKvhx3B2/QKO43DcOiLyu0z6x+imTTjySGKLYqGGFo7IOQ7+LMaLIwaDMSur5wmwufbeLe7eP+Cvff1vcHTYxPCGHG7fYvf2DZiFlKobXLp0gZE3ZjRsMx71ef+ex1/6zPPMhhPOb57Fj85y+84HfObFT3P7gzv0Oju88vnPMB4PKeSzBP6Efrczd4acdHn7u7/PuLdHzkkIdAszX+Cosc1ytsKEOrXFNbrDAff2IkLdQtchiR62pJpmpNwd0kKs9H7h+HG7d574kQAnKxIlSARBwGAwYGFhgVwux+3btzl//jzVapW1tTVs26ZaraqvI4s/pJoTjP/g4IDRaKReNNd1H6l4DcNQFr+iKL137x5bW1tsbm4SRRHNZlMJzgqFAufOnaPZbNLr9ej1epw5c4bxeKw0BWfOnKHf7+N5nuoeOp0Om5ub2LZNJpNhNBopKmSr1eLNN9+k2+3iOI7il+/s7Ki/L0toxDYCHg56f5KdQxoSOMkseZyI6KMe+ZqieJaORbo9wckzmQzZbJbpdPoh3x+xdJBkL7RZGZpmMhm1R1lmC2KtIJX2wcGBUh9vbGwQRRHHx8esrq4qunG/36darar9DqLXEN2FWFULXCm2FTBXnb/00kuq05EBrOgJBHYE1LOQ1nfIvAkeqroFPjuNAZS+h4/TfqST/pM4n4gEoPltbNfAn42ZhhE6MZ43pt/t0B22SMIp0WxApbBOp+BSq1dpHB1QLJbR4oQ4jLDQiZOI6XRCrrpMaaVGQIwRTZlFHVp33sWxXArVdcLoiHzexdADRt6IcBZx3Bxz6epTzOIOfqDj5jOsn1njxZdf4t0fvUW/75PNlIjR+fRnP8f2zdtsnF1ld++QWRhjVWvMfI+NsxuUV89zcPce3/nu97h85QpupsTe7hEaM8JZl937d7B0g17vAMOwiP2EQX+EH/pknCyWZqNZNnbtPJ7TYRS0cHVwShUCp8Bxf8pOv09EDisICQzm1E40opi5IRAnaWZSGerEcbp6mL+QT/KhkpMkc9O3yWSiONEHBwfK2VO4/vl8XjE6tre3ldpTmCVS/eXzeer1uvpYo9FQHkDFYpHj42Nl21Aqlbh16xaLi4ucP3+eyWRCuVzm7t27jEYjLl68yNHREcfHx9i2zeXLl4njmBs3brC0tKS6i2q1yhtvvEGlUuHSpUtq4YskqEwmw8HBAdVqlclkQrFYpNVqAXPLiCiK1G7j9JIawbJlUbkMxlut1p8L2z0t8H9cRzzvRdAl8IbcF4GBJDnkcjnFWonjWDl8SiconaJlWeTzeeI4VpCeQIci2nJdl263S5IknD17ViWXbrfL2toam5ubigkWxzErKyvs7OwoyE/mD6LyFf8gYW8JlViS+M7ODuVyWRnTpbtaGUqLqjubzdJsNtF1Xc2HMpkMruuq4XUav09X85Kk03qBk7oOeWef5Hv6iUgATqwxSwKMyWQOxzg5/KDHNPJx7Qz96RRmQ0aDMYQRx9v3ydtV2pOIQqVOhM9k2mHQMzD8EcdZHStbJrG79L0e/mSIZRj4vTaj4xZeOMXJVhhPZxRzdUw7TxDeZxb53NveZnXtApaTpVZ12br+LnEYcTzuUS0vUy3XuHH3NklscubiBYqFCveHHne2PsAPZmwf3mTyRy0q+Ryf/+JXeOvdd8lpEZeePsvtD7b5zJUL9I/uEJk2ljnfwjUc+HRjn2DQJkwmBMQ4loMTQm3tee63t/hi1gTDpT3s8qPb+zTGG7jEYEg7+aDS0+Thmruq6sa88tDnK8EeoD5zawiYC+80DaIoniePJ3jCMFTB0rIs9dKI4ZZAKgKLyIq/6XSqWBhBECg7B6mepeoSl8fxeEyr1VLUvMFgQBRFrKysqM1fEmw9z8M0TVqtlsJjgyBQhmz1ep2XXnqJ73znOziOw9tvv81kMqHb7bK/v88zzzxDLpcjm83S6XSUAllMwdrttoKIRBC0t7c3v9YPqlxN0x7ZWAWwv7/PzZs3FUMGHl2xKP9fuiDpCk7CBOnzJKGC9BF9Q/r7DIdD9bH0ekoxXxNxlSxyl0G32GtI0BVr7LTtgwR58d3f3NxkOp0qm2+YQz/Hx8c0Gg1FDc1msxweHlIoFJSWQ6xIhE46Ho/VXuDhcKg6y8FgoIqJRqNBNptVQsLj42OCIFALb7LZ7HzOZlksLy/TbDZxXZdyuaw6QOlMTzJ/0v99GjyUhvfS5y/UELg37RHPJuStCfl8ldnMJ/C9B3Sv+dam8WTAeDxmEoQsrS2w3WywPYhwHYvJeEowm9LvNrCjAr3jAtX6mPF4CsGYJPIJvBHjwRHjqUeptEAhq7G/t00cZGl1DyhkL7O332B9fYPDowazSYeFpUWMMGA8mnF+ZRM7U2XvsMlxL6C2ss79+ztcv/Ee20cdptMeCVP8mc7OwYhRxiX7ox9wf/sml89uoPslMrZJa3+foGhSK+UYTgc0+gOc4lls26Lb6zKedFleXmAwHoMTEGoxLL3AvzqI+LTu83bTYdd7Bk0fPsR9hcyTaI8sikmvBRRn0JPnITqgP3G8WFgdgvmKL4xgv9JSO45Dv9+nWCyqgbBhGAo2Go/HwFwFKkFAxEJRFCmTMcdxFI9alq0IbpvJZDg8PFQwkXx9CTKVSoVWq0W/36fb7SpHytFo9Ihy9f333yeOYy5fvkypVKJUKrG9vY3rutRqNYIgoNvtKngrzexZW1tTv1uSzK0S9vf30XVdLTVJd2InX/LTAvrJCvLkedJdHaContLVBUFAoVBQYjip7qWCl+dKVjFKZ+D7PpZlUa/X1T7okwNlEfyJDYMkiTTsFIYh169fx7IsCoWCsvjY3t5Wf1+IAJK8pDsDHllQAw93FMuMQyicURRxdHSkErH8Pblvuq5TrVbVulLxmcpmsx9i9aTvz8lu4DQRXxrqk/MXZgYwns6w9IC8pjMaDsjXFhmP+swePNSmaULs4/kTDtsdbPuQtY1nWHNcbvz4h2hJhKVraFFIs3Gfxv4Wu7s3uPTUWRwzIp5NGXYOKJdKxJrJ1J9w5/Z9XHNGFLjUSxsMxx0mAw03W+TFq+e4u3vEb/+L3+FLX/oartPGG3TQbYe9nS0sPc/RwT2+/MJf4Z/+7reIMTENjSTRiEINzdKY+iPev/FnjE2dn60W2bv5Z6ys1pn24fwrn2M4OGAYJmRLKwSmQ7/TQU9iEmYkmGxubuIHBmN8PC3PgCx/fOgQJGBqPXQcdB5UgakF8aRooGmh0HxL2GkVx4cZCE/svj4Q0FQqFcUVl6CRlrNLVW+aJpcuXVK4sFT8o9GIwWDA0dER9+/f59y5cwp+GA6HCu/d29tTqk0JKro+30OraRqXLl2i1Wqxv7/PCy+8oHDbTCbDO++8o6h63/3ud9UAM912SzITe4lXXnmFnZ0d6vU6165d44UXXiAI5orrxcXFOeW40VAJx/M81tbWHqnoRXyW9kuShJEO+Gmq5Wkv/uNsok8a8j2J43meCohpLxy5XvJ7iaJWnoXZbEYul2MymajACigxleu6SvErnYJU1rZtMxgMlIeUwGbtdlsFfrF5sCxLCfxEmS3mfEdHR4+I69JK3fF4rIbaspQoPYfpdDo0Gg0KhQKVSgVd19UQ2fM8er2egvrSMythv6Xv1Umrj8dx/QVuOq3T+wvTAXSneUqOhxfFFByb5sEuUy/AzjkYem5eTfigxQ6VgkV/5rORhCxWiwSBR8ap0u12cYsxebMM3oSlwhSvc5dJ5GNoOiNvQpJoJFECiUev16RSqrJYX6E9aOHmdRbqK8RGlrv39xl58OnPfJ7uoM+Fy8+zdec+9+7cZaG+Qrd/yJ3RLv/oN/8xJvOHLokj0HRIwExAS3ScKMZ3bRr9Js+sF6lXXYzYZ+vmB8QkRDacv/gyQ6/KrP06s2mXpVKBIAFv5qMZdTAqTLUSQWwQRg8CJhZJoj2o3nXiB5YPMTFm9PBBiwnVCxlrD2EfeIgvhkIV1Z68KFxokUILHAwG6oUUbrQEbHnxYN7Ov/HGG2pWIHiyQDWi9JUh69LSkmKRCK1O2vc4jlldXcX3fXZ3d5Vo6+bNm5w9e1YllVqtxv7+PsfHxxwdHamhIzxahcnHNU1TAi4Rut26dUvZDVy+fFktRRcPIPn5arXa3NfqARNFvkeaA55+0U9W9yeTwGkVY/pnftJdwHg8ViZpwqQRLyXB+UUE5vu+skiQal3gwMPDQ1zXVVW553nKo1+Cs4j4pOKvVquqcxQ6qHQGsrPX87x5AfUAfpGZy9HRkfLtF3W6dCvy3Ijfj6ZptNttlbylCy2VShwfHytaL6CU7AJZpq+3wGKn0TdPDvBPnpMVf1rj8aSKtU9EApiVNzgceiSDfUiW0DSdfLGAbmlMpwGWbTAY+Uz9IYPBgM0LzxFjkGjzFt6feXOBh3YOQzvArU1pjRJMIyCfy+FaFswSJrOQzTPnGPpjzJxPoGe4v3cXK1NAN/LEpoUfhiwu1sl7I/b2jmkcNCkUq6wt17izdQt/1uKwO6DbnhFoHrMkQOMhTqclgJ5g6gZWkvD8wGd0sM++16dk2YRBn3DUo752hmqlSlbTWbv6FLemdxgcXSNMItxcnoHnE8Yj9FLlkWulHB/jFCc40SFJIHkw/31wkkQjYf4nfT7OAWH6iJhL+NXi6SLVonDBRWK/uLiogp8M6XK5nBIVCe5bKpWw7blthawCrFarJEnC3t6eavElsMiwbmlpCZh3Ia1Wi0ajQblcVvTNra0ttUSkWCwqYU+6MpPElc/nOTg4YDgccv78eUzTVBu+FhYWAFhfX6ff79NoNFSAjKJIsU7SJ135Pw7O+UlsIPjJ+4Gf5BmPx8p+Q66JDDglScrPMBqNWFpaUslYNBqaprG6ugqgTPSkSwJUwJeF62IT/pDt9qgwSipxwdr39/fJZrMKgpK5kyQtOelgLM+e6BOKxaLShARBoGikGxsbHB0dKWhREoQ8a2lX1tOonHJOGwSfBgnJ3/04lN2fiAQQFjcI3BzH9/4l06CNZTsUK1X82YgwnKEbgBYTxRMK+SK3b/4Zw5UZtdkq/mREqbiIQcI4voE2hdm0zmzQJ1/Iki9U2d4/5MzaKrae4MfQbB5jEKPFIUEcEk5n5IsFRoMuyYPPl2tlMo7O0+fP8/prf0S+UKFaKnHc7rN9sEsYmKAHOMZDNo2JhoGGiU4RnWISgxGykV/lR3v3aUUJ6ws5yrU8K06OUrGObkRYcY+nr36OYfseg4MbD6TjWSynim9nGIYmwezhTY+iCC1JV4BK7kusp7BGzZjX97qBHp++WET91Y+hUhTnx263q0Q8ouwUTx5hAQHcuHFDDeEEI09X9bItTNPmC8RlE5cMEqWFF9aI4LqyZGVnZwfDMBTd8ODgQG0IE+/25eVl9vb2FPYPDxWa6QTgOA61Wo27d+8CUK1WKRQKrK6uKraPrut85jOfIYoibt68qa6zQB9pl0ip/B/elw8P+R4nAjp5306ygJ70fc1kMsquQaifAvWkg3KSJIrKK9dD9vBKhd1qtSgUCgoakopcgqlU2fJvpXuUhJC2/BBYyPd9ZdEBKI2HLPs5jSUliVdmF47jKCaQMIqKxaJaeJPP59XQWLodMfh7XCKWj51mBZH+uU4L9CdhoSfF9PpEJADDyjAznyKoPE3SvoYWZHFzeSbDEb4XgOZDYjEe9ShmDTrtY7zJMd2hQzGbQWeG42TR7RLFXJZgOmW5tkjG1YmCkDMrTzFDI450xo0OrcY92v0Bjl3k+WcukiQaRCM6/SkZTcc0Z2zvNIh1g+FBwgufusrbP/oRJhpv/tl1Cm6Bct5g1PGI9XmQzWsOxGDpFg4JZcOhZDuUSgVqgcXGCy/zB8fbvLK+xpkr56iY88AzHHVJDo/wxxMW6qsEgyOCZIZlueg5g0kUMV/soqMpHPFhmz+HhOT/y4pHqVgfwgmxphM/eIbSlcajKyGfvBuobFASKmSv13vE0ArmCW19fZ2dnR0FuwgWLJxwGeaeO3dOvWQyS9C0+R7Y+/fvK0z/0qVLTKdTer0ek8lEecnv7+8TBAHtdptisahWRb733nsACv5JDyJFOSq0PvGst22bn/mZn6HRaPDCCy9w9uzZR2YTwkiSjkGYL2JPnB76nnyhfxrL42SAEeglHWDg4xkCCzYu+gqBSdLCM9nGJUG3XC6r4C3mZlEUsbGxoQb24ioq0J50feVyGc/z1JYuCbQS2DOZDIVCgeFwqJ4zEQOe5O7LdZJgn75mYRiq5T69Xo9yuQygaMEC8RiGwYULF5TAT/Qt0qFIAE/PcdIFVnoecNLdUwgCj0v+jyMI/HnPJyIBgEagGxj152kFOuvjG3TbDTBivOmQaNYnMDIQhcw8g2rFYWdvizXTRUsCTMMhn7XRbZMknLG+UiOJR5i6gZEx0PWEYn6ZUb/BYNIiiWc4ZhZ/BN3uGMs0KRar1EsZZkHCmc3nMHePaLbGLGyM6TX2OFMscdw8ZkGDKAgIgyk1p4btZkA3iYOErJvD1C0ypo3pBdQzBVZKdRayWWamhp0cUVw7i27kCAwIZz7acIBv7XOwu4sWj9GNPLY+w7QtXExmho6uJSR6CPz53Tr/XcE+px1Rvsbx3MFTKkgxbZP2uVwuc+3aNQUNaJqmZgOGYVCr1QBUFW7btmKPyCDRtm08z6PT6SjoSL6fWEL3+31s26bRaLC6uqrUnulKUqp4+Zoy1JtMJtRqNbXLN5fL0Wg0WFxcJJfLqY5EHC+Pjo6UTbL4A6Whgo/aeT2pQPBve8QF9e7du2xsbCjWTBr+kEpdMH9JwmmrC9/3laJWgjXMhX8SUBuNhqLWVqtVstmsGiQLpCTJJW0sF0UR3W5XFUHiE5W+5jLITvPuJckIceHg4EBBkWmxmzDPJOing3maQJA+J7uD9PeVz8vXOAl1ndbpfdTziUgAYWJBEpBYKxjrJXp7IblgDz9O0J0ifjDBTnR0y8D322iWi2vCqLOPa2vkcxa6FhL7MzKOw6jfpFYtoRsamm4xmUJozIg0nRgN3a2zv7PLcBhRWFqjmNc5vnmLnOOQdR12D4+4eXuLwJ8xmhoUQ5d86DBuB5x1V5kZWYYzH7uwgmnZoJuMxx5Ft0jWypDJlcmEsOAWyLgu9XoN04EXhj2KpRrPLOZxbYNm5wA/7jHrh5hJj9F4gmWZJJqGbuXwzQKzyAXNwiJhlnrZ4+jR6iJdyTzEFKNTzcBO+9jHEUSknTVNk5WVFSVyEnhnOp0qGb5gwNVqlV6vp1gi8oKICrRarT7iOJnm0ufzeQ4PD5VxV71ep91uq/WDsss3jmNFUd3d3VW8cV3XHxGmiVeRbIkyTZO1tTWy2Szlcll51biuq5JLNptVQjBJSrIkPI2Pp8U9aZbHyaoxDRGlq7/TGF2PGyR+HPfVdV1WVlaU7bUMZyXoSfcnwq0wDNXfSauIZVAsgV+IAILFS6cgy+Mnk4ma90jgLZfLjwioZBAsW+TkWUkH5fTMQu5H+t4I6WB1dVXtGJahcxzHCsJMU1rla0kySJsfpu9V+jqe1smd/Lsf50znE5EA5NeLkxDNyuKtvoxx/B5mMCB2Aiwc9HhErHWAAH9gsLm5yE7rGNc2sDQfI9QINQMDHcdw8b0hEz8iU6wTo5GzLNzMArPpBG94wKVL57l+4zY/eucWA8/n6efOca5mc9w85LvvxZxZWOTm0S6ZSEO3bTadAplqCcNeYhxq1MsZZo5LrlhlGmnUyglGDHnbpZQt4uomGW/EMysXWCyXKVRLfPHyVf50+DYT70fY0zK2Dp6v4XlNotkMUzcIohDbypIYBfozk2FgMw00DCuBmY9uzPf6WswD/Jz9M7+NSTIfPquH6EGg14BEBsUwdwN98LBqoTx0H89DJi+qVPCy0UlgEZHNS+VdrVbZ3t5WVb8Io2QQKDsCxA5ARD6lUkm9sGEYsru7y+7uLleuXOHOnTu4rss777yjVKmiMj537pxS9KYDbJoOKFCTVJ+6rrO4uEi1WqVSqfDLv/zLCkoSFogMDmUeIUFFPGGkykzjvieDfPqk9yKcDAjpj6dpg2kK45M8oomwbZt6va52LQvkIvfb8zwlEFtYWFCCLrmeEvTFJE4qeXkmJAEKU0gC+NHRkVruM5lMcByHTqejTNhs26bf7yuYR7oNIQ5IF5L+mtLpyfMmxUGn0+HixYtq0YswgwTCkxlV+mdOQ4anVfdyTsPx0wNh+Tfp6v9JJ/RPRAKQIzdct3J41cs4o2PQfHTbIRk2iSdT8tYayxsZDtttMgYkWBiGhq7FGHqA70/wvQTXyZErVclmHIajKf5shBk5uE6JUrXPeByyslYhiT1u75hcv9ZmtxzR7Ixpzkr0vICjYZYcDn6vz9c+8yLDcQFyC8wMGy82wHQwnTy6k2XiDxl2+5xZXKeQqVDOFVh0TGoFmwur6+iWDmHAX7u0wT/74E8Zl0063oggnJCE+rzqN23s5MEAkTn/OfZjkkReFp04mnt8Rmgkmq7w//R5SAX8sJ9I+vPzi/7vxhZIApG0+oCCVIR1IVJ6eVGllZYhrYjIisWiEvjIEE5YRaPRiEqlosze3njjDUqlkrIXkKAkw+KVlRWGw6GCgITmKUtM5GctFovq+2YyGWVVLNzzK1eu8OqrrypbARlkpwfH6eAgKw5PWgD8tOHeaXxwOaf5x3xcJ81IEitkMTuDeTcmUFcQBI+s19Q0Td0zqboFz5cEO5lMSJK5S6fv+wyHQ/U95RqKEKvf71MqlfB9X1mKS9BMD6cl0KevkVx3EbQJ/JckCZcvX1ZQ02w2U4pmYTSlC5Q0i0i+3+PuR/pjJ7vxk9BQWi9z8t8+ifOJSgAwD2wxOolTQ7PnWF8+UyPWDZg2mY37TDHZvHiF23fuPVg5F2A6OnEcEUcRtm5gGTCdjJj6MZrpUl9aZTYLyeVthiOd6uIase4QjGY8c37AUafJNKyy90Do48V9Am3KOJqgo1HJLWHHRQy7SGRniZx5cLBzJSw3j6fXsFZ0bHRKboFSqcx6OUcUDbFMHdc20IIQo1RH91pYeQs7sgguRWQtAAAgAElEQVSxiUkIo4Q4iSnmiuRdlwiH7jgkjjVAHlyH5AGpM5IgT4KWsn2OUmwftBRbJEk9SFoKSvqY8WN5iOXFFdGWCG0EZxUGyPr6utrzKm15+sWVCloqawnSEghEfSu2ELK8fXd3V+0hBtQ+Yqn8RbovA0Rx9MzlchwdHSlhV7lcVkvs5XtLNyN89/SQPa2Ilc+lVwyeDBKnBX+BwNJQz0khUfp7/rTK80neW0Ct7RQoJwgCjo+PyeVySsQ1nU7VzEagkfR2MLnPwgyDh5TNNKYPqE5QtBUy9xG1rbC/0tYO6WdQ7osEfPmcWDoIwSCbzbK4uKjWRDYaDSUqFFgpzRQ7zdb5cRX+yWv4OHbS/y86gBANPQH9gZmxrs1hjlAvYueLeFGEnpkSFRPK5j1mccB+q4ft5IEJYZTgBQmlfIkkDjAIiLWYOJqhxxoL5TLhZEY+69LpHmO5C/SHAWGQQ89l0UddzuRK3G43yVkJ7W6LxLIwA41Qh45lUAxinEyRWmkBPZNlqOmEkYZTrRFZLoZmEWd0tNmM9ZVlnARyuoFRW6F3/4j1ShUGPgyatK7vkd3wGbk5wpzLLDAxDIe8W2D4IDjkXIucY9HyY7zwgUdI8qBKBOZeP/OHwUjm6I6WQPTI85XqEKTS1zSShJQX0EPYIHrCxeNpD7UEKhkaikxeKnKhcqaZGWIBLEEgXXlKtd7pdB5JKDIorFarimoo26jk50mLi6RSFBviXC6n5hOySnBlZUUZia2srLC3t0etVlNJ5d69e8rXXoRoYnAmH5cKUxbByHWS87gO4HF48EkI6SSu/HEMiU+yjCQ5iQJWILbhcEgul1MBOb3lKw3tCCSYJInaGS0VuTBzJAhKYJYOK11pi+hKmEcyoJVnTYqIJEnI5/OPKJWl85NqXgbWAFtbW4/Agid3LEjgT3996fZO3oOfNMc5CeWl/+3H1dl9IhJA+jx2oJk9gxkbJHqINdnH94cYGJiWi+VaRAl4foKhaYRouK6D69hE0fxmxozod5sUcznyicUgCcjGGt60TbaeJQ40zlpz8ZirRxz7PsQufhySWAZLSwtMgxxF3SZKDMxMBtwMRqGElsvhuFkm0zGd8YhgNCEKI/KVItO7h1x47jLhtVuYrk8yc9AWHQ5nR5iZ8zArgxGiGy4xFqWcjZUkaElMEiXo0TzAGwlEj1HrxsyD+7+Nl9u/K6hAzmnKVYGE0i2/WAOnW3d5oUV4IxCRYL6CAwOP2E2Xy2XiOFYMHuGSCwRjmib1el11AAJLLC8vqw4B5slEqnbhng8GAzY3N9XqyE6nQ7lcVhWpDAEFf5aBdhqfl9/vSd+Lj/venmSknBx2CttJqJOASoYyBxD4BFCKcEkiaVtvSWyS2OM4ptfrfWhwLkwjqd5l4Us2m1VQk6h84eGcR6r4tIJXYDup+ofDoVpwIz5WQgc9qf6VZAY8klBOBv50opfPnTarSV/nx9mAfJTziUgAmqbN15hEMaQ5shpAQqJBJonQ4ymx1yEKQkzDxjZs3GyBIIqZ+gFhrGNoCTo+TnauMk10jfagi2n49PtdJrkM2UwZ27TJl2wolvGDGd3umGohg+vkseiT92NaXRhPQ6Iw4a3pPl9fvYA9qxGVisxqZfqjCYWVZQZ+SJJE1AsFylGAaVvkCjlqlTL5YhVmU0wtxI8cHK1G7ZkvYhx3CLNZ+rMhtrVIrlDGMnO4ZoKuJcxijSjJkJgJFhp6FBFFqeowDeOQ8KB1ml/HxwwLUZ/7MN/8JylMP8p9TbM10if9PeM4VsM0WaMoHYHQ9OTFkapcKKWydEPsooX2KVCEqEwvXryoOg9ZGRnHMX/wB3/A3/pbf0t1A/V6HcMwFAdcVLuiaJUlNWJ+JvdgMpmwsrKiloMLw0mw8NOsgNOWyOmPpwNb+j7+9Pv6YYggzc1/UudxVWz68/LxtJ1GHMdqgCp/ZEYg0JD8/lKxz2YzVQDIs5B2CRV6ptiMiP/T0tIS2WxW8fQFhpP7LIkpjd2n7amlkFhZWVH7pyeTiXKmlWsqcyPpGtKsrvQ9V6SLE4H/p8180uckZfRJnCdvAPPnOBo66AaJ8egavESbB7dEg0hPmOUWIL9M4mSw7By6Zaqb0uv1SMIY03DI5ZcIkixhbIGm0et1ALAMk3gW0GsfkXMLmNk6yf/H3pvESpZm932/b7hTjG/Kqaq6Kru6mqxms2kZpiyoDdjrBmwBgmxvDAIWuLG0MqSFFoJNQoC9MrwzYGshAwYtSIQBeyV50AAYtGhYNElZ7iZZ3cXu6q4hKzNf5htiuvd+gxc3zn1f3Iostlgv6YQqDhB48SJu3OEbzvA/kz6GWHXN4auSx+ePOT074he+9lX+jZ8d86deO+L118b8Z//H/0iWLTi5P2by1GHylje/8ZAyeI6qnKJxqE3NOEbG9Rq/rnn0vd/HlQECeGsoxobf/d5voc4eUKkFwUWq6itMjh9g8glVOcLrkosm46Nry4cry2LT4NyGTezGIQqj14aIwodI5yOIhNBV91TKcFP/vyOxIrqXxmKwGCKaiAZl8C9hNaSm8D4YQ7Q+Ma9lY0oG5vn5eV8/RrQ3Mc2l96qY68+ePeshFtFKhQl//PHH3Llzh3fffZc7d+7w8OFDTk5OePToUd9IPMYu0UsYhTAFY0zf8emNN97om5xLjXetNX/37/5dHj582G/6yWTSl7QWbbauay4vL3uhlMJZkJT5gB3hKK8X4cBDjXwobG/bIkjLVbzI5yCJexLKKcw/z3PG4zFHR0fcv3+f09PTPrZehLYUVkstBGF+Yi3ked4nlz1//pyTk5PeIpQifz/zMz/TCxIpMy7IgjSfl8QvsRQlr0RqHMk9/cEf/AFPnz4lhNBboXK8jK88azpHqRWTWn/pvKbjuY/S3wzff1F6JQRASi/CLBtygp3Q2BnaznFekdkRZXVMWR4xnd2ldhva0HC5uOhKCftI2zqq0YTnl9fYvKAaTxlP52zqBZqW1iiy6QnezDEx583TCeP2Kc359/HuMeMTz/d/9JyVyfi3/of/HHfc4t6dUl54DIqTozmuaTi7e8rx3ROc7tK1xmXBaw/fxF1dw6YmuhbGU37zxz/g+P47vPHwZ5lO5lTVmFE1xtqM1jVcrhuu6sjSWUKAqMy2UNsuQx+WDfijxtOFgAuBqDqXcet913vhT4j2LfA0JjuthZPneZ8BLLi+bEhpOCKaoDSEqaqqrz0kG1LCTJVS3Lt3jxgjjx8/7oXOo0ePcM7xN//m32Q+n/d9g6uq6hn52dnZTt13uYemafoyBcfHx+R5zmw24+HDh30vXGlaL45NKW/9eZj/T1u9U+ZVNOnUahAm9LJI5irVaodCZrPZ9MxTHLNSGE46rT179qwvyT2dThmNRj28B10JBykZXZZl73wXP4M0ZH/rrbf6Z5a8jOVyyccff8yf+3N/ru/7K4qCWJQyZovFol9fIiygEzzvvfdeH7wgzWPk93JfAh+mLTxf5PwVQZ6OoQi4n4ZkrOW3X5ReCQGQSsChdtgfo0taPSJUZzg9wSuo6zXGZhTVmKIaMZufEaKlaeH88prGeS6XK+q2RZuSplU0LShtWVw/o16do+IG5VaMCgjNNevFOcvrBX4JOow4OfkapsqZLzXrVcO/85/+RabZkvnPfw0KhTmZcvb6HS4eP6Zdr7j/4A5RBeajEhcbWG9ol9cswgbGBf/qv/cditEDNmZGnheMqxFtK5u5JS80rTNcrhXX6w0+go+KoG9CCVOoIHUCphtxiB36GEArArG3qtC7jqbbNi/Tc6bhbul15L4l8xboM2dlc0l/X+dcD/vIphWsVhinhHnK8VJ9VGr0S7bp/fv3d5J4/vJf/ss8ffqUr3/96/1mPzs76/pTb60K6Sp2dnaG910DegkN/KVf+qWd/sYCdcj4S4y5tK9MoYHhvKba9R81r8PP4KbUQGpF/EmSUqrH8QWiEZ/AbDbrczdi7PpCn5+f9xq/OHnFWpB1I9FE8/mc+/fv8/Dhw77/7yeffELTNF2/kK2glVyQ7373u3znO9/pO3ml4y35GRKumjZil0Q1Kfkh+L9YIRKeHELYCQsVX9PQiStzuS/zd+gT2jee+4TsbdAr4QPYRzFGVJKcZGMkqIjRFpVbonO0Tc3m6hk2L7pXnOL8Bh1aJhODUpGCik3TQGixpjvf5eKaaaFYrz3ri2uMrhlVlvv3x4zGb/LJJysmY0NLoFGet+7MeLaJXNUrfnfi+M5/8u/y93/9fapqxOWn58xff4OvLh1Rg4+O+b/yDeqPL8ijwmaGZbOgPJ7CtGCdB2gD1eyMVfOYWlsKU0FsQXlibBiVcypnWW822+qekeADgfBCRj3EkYV6h/qW6Ue2EUDbkkHqdnn+59LnMSJhnMKgRbOXTSlalTAGiT5JKztKMo9SimfPnvVloaXj00cffdRvQMneffLkSc+sfvVXf5Vf//Vf5+7du71wkFo3s9mM09PTnQ28XC45OTlhuVz2tWjECkkdowIlif9BktCGzH44RiIUhnOeBkikUMPwXGms/m1SusZ2YMYBcxMmKcl0RVH0DnjpC5HCdavVqi8PkuLqdV33wl6proicQITHx8e9s1+sB7EGQgh88MEHlGXJt7/9bX7jN36jDy2WvAPxM8xmsx6qkvG21vaWo8BGElkklpacTxSOIZMeBj8M9+e+44cC4UWO39uY21dDAGjVtTSJkRgVahvt4reZrkopgt6GQBqN8jXRBVRQGOOoiikmn+CDodSKSo0IbsKmXmGLGVpDDBuMgswoMlpiqFkFTz6fU2aB1fqS0ablx+//iKPZiOgd0Y3IijVv3Z3y0I55vqhx9ZLHPOff/Pcf8o/+m9+hnB+D0cS3T1Fo7HoDeUmxuobiDJTHrArW0fHs6gPWo095LTo+XC24WNesXct8AtoonOtC1sZVhlee500g+AhKobXFBdeFdSrQISYaoODGW9y6j/2/CTPUmD5cKCqFDhEV4k75aOLLcxamjuB9Czct+SDaThomKP/HGPv6MRK9kcZgCyQimaIS7fODH/ygTxZTqqsL884773D//v2dDmS//Mu/zK/92q/1ET2vvfYaH3/8cR8L/vjx414rlKQjsSwku1cgItFgJeRRoIs0D2CfEzBl6vL/Pgaf/k3HeDi+ty0E9jGwGGMfbw/02q7g5FI6QRimUqov2SD3l8I7UhpEhIcwZJnD4+Pj3i/z8ccf905e0f7FxzIej/ne977HyckJv/iLv8hv/dZvIZVEU4dtGmUE9D4GEeySwS73LlBSmm28z9H7IihoKAiEhnP/okSxzxMM/yL0SkBAOkRMBJto/N0Amf7liQTf4NaXWNVQ5hXaFtgso9lsiPWSvDDkuUWrnNp5XNBs2pZlXVM7hTYlUReEWBBUiTYjMDMcYzwjyAw/9/Nv85WH96g3DffvHlEWnp97+w4nI8+f+YWHPDiqmM811dsF//V//ysUsyMoFVduBWMD04KaJX6xgDJwub5kYksmywv+sPoB6x/9U97/we/wwZPnzE4fMD0+wVNTVDnzoxOsKRmpwL1JxrQaYZRGb523W6UdrXZjjUUbGUYcaLoX4bNWw5B53Db8k17j80LZhHFJLL0k5sjml/BBCb8UuEeifySlP030SWu+yNi88847vVNQYCVhyt/85jd59913+8zev/JX/kqvoY7HY15//fUuN2PbC3i9XjOZTPpCdjF2Hc2kmYycWyyN+Xzew0JHR0e9EHoRc5D5E+YynB95P8T+07/DY2+b9lkl+3Bs5xzPnj3ru8OlEIu0S5xOp8zn8x5TH4/HPUyUhoPKvF9cXPDhhx/y27/92/zoRz9iMpkwnU65urrqQ4vv3bvHnTt3egfvb/7mbzKfz/nqV7+6Yy1IJVP5K/d09+5dqqrqM5glUu38/LyvOipw3nCufpo5GAqJ4T4cRn4Nj7stejUsgBfRtn5NCJE8QogBW2iMm6JipA3PCXVLbsG1NSqsyIsSbzTLNjCqSpyvWS6X5DZjsb6mKgqislTZCG1AR3CtoyhHqBK0u2Rz9Yi33/oaZTUjGxf84Q9+yCyrYPmE06nm9dlbPLl+yv92+Y/5j37wHv5rb1JGCHj0KKc4HtH88++zaTfMzZjVRx/yP2/+CXZcM6+f8zjCyd2f3/omckxZYKspma1QzjGz0C4DxqzItKHdhrNqtglfwNBVeMNkbxZglnzvEhzyVaQU6hFoRxyoEnEhZrhk4EpjGWm2IiUC0hA9gYwAnj17xhtvvNEXepNaPOLclXaNk8mEv/E3/gZ//a//9b44nFSa/MlPftIXmVuv1/zwhz9kNptxfn4O0PsNpO+AhCYKPCWCReCRP4pS4fl5AvWnPd9tkMBPaYSXrK3UWhHhKxZaCDdF+GReJEpHnPtiLQmmLg5ZgY3EISvWoveeJ0+e7FwjhNBnE282mx56+4f/8B/yF/7CXyDLsr4IoIR7xhh7nP/NN99ks9nw6NEjYoy9IgL095b6AuT50/o/Q00/nbsUz9/JddqT/5TCgHI+odvwCbwSAkBhiErhY0CpDqdQClQMBN1h1nVQ5Chck9E4j24aMlVgx2O8b3EE4mJBLByT6SkhHLGp60545Ibl8ooyK2idpigNtY+ooKgyQ1HlNJs1y01NaQrs7DVwHrKSsYl89Z03mFYjlrVmlGscDp+d4M4f8xf/2z9P+WjOf/Vf/Drt+TVaK7KPF+R1TfjR7/FPrv8f/u+P/ymjt3POlmcwtszNlJVWlNMpNi/ZrBboYFEB5uWI6K94cFrwzlrx/U1DGzO8VwRucF+zzQTuqoImuHBU6K1h57e5AlF1grR3NG5DRSNsC8VFYgzE+MUX1JCGePQ+ASSbWUz31Ikqm1lqBaVZtZJRKw7WNHdAIokk1E8YONBHg9y5c6e3MERTvXv3bq/V/9W/+lf5a3/tr3Hnzh3W6zXvvfce5+fnXF5e8t5777FcLvukMYGcJIcgrfcD9BnPr732Gm3b8sEHH+z4NoYWQWrJ7Qv5E4Y79AV8Hsx2W5TO4YsiXoYRXqIZi0afwn3ynTBUifCS5xONXTqqyTNba/soIUn2S8NrJTIrjdX/e3/v7/Gd73yHb37zm/z4xz/uE/6KouDBgwfUdc17773Hp59+CnQRQpLRLAqJ3Gda3lqOTZ3N+5z3Qwsh/V7GaVgYcOgA3qcI/HHplRAAQXXafRsDJoE3VIAuzF2TqxbtW3LlMFv91weFizfFnBSatmGrZXSOPR277ENGY9bLBX7VYtaWO3fudBpDdJ3wUZboW7yxBJXj9JrYeiyBPNPgrqCusSYSnGdaZHDyGpu4Ib8X+Q//p/8AvdLkdeCNmDM90/hywfGdu5R3Le3lhufB8mFdMzmZMzozBDQozezohBjBmk4jyvUIFT3/2tceUGQ5v/OjCxbe7Ww0ryGECEZh+lpBugfRhhqDMJIXYYovI8Kgv9ekSNaQMb0oukXwVcFqZRPDjRZW1zVVVe207Ds5OekdwenGEYYkNWDkGClHPJvNKIqib3guWvrf+lt/C6BPVBL8WMpSP3nypId7jo+P+1wF6UgmjEo0/xACX//619Fa8/777/fQnVDK1GUsPk8QpDVyPm98XwaJAEsFQiqM0jpA4qtJk/rEAhMGLJqu+HbkOGGq6fPLM4tQEMe71JoSWFCEsLxfLBb87b/9t/m5n/s5Hj582BcDfPToEd/73vd2HPTykj4Pcj2pAipZzXDT+6Bt2z5s+POgmhcJfNif8btPyN8GFPRKCICoOi2/S/zS2wJnChPVtqBZJG88ob4krD5AeUeWW0KweN8lRBmbUdkRLnRmYmYLWuewqF57qKqKzXKBzizruqFAYekEjbEFzre4aLFao7znqlmgtKfyNcQVhVFM799lsaxp2wqzeIqKIxqleD1qJvenLJonHJUZRVkR6oKrxWNMMSPaknrhKeZnRFugbc5oPCErSlxTkxclVTUmFKDXnnFmaWLDGw/nvP/492g2z3GJyyZyk88bts3hu/efjUQY0jBa42WFmKXnH1IqoCQpB9jR8tKGInIOgYJSTbAsy37jbjabPpY7LQUsmr4wWHEupkXlpEqoaPNaa46Pj/uolFTrk6SjNHRRjpP4/9T5K5qtlA547bXX+PDDD/v73jc2KQ2rWL5o87/IyrpNSpmROGjl82F+gPhpRFCIMJf5BXrhKMekzD7GuJMQZq3d6Tksob5p6RD5TBg10DvlBVL6gz/4A37/93+/3wuyVtLnkd9JXkgadSZtPdN6TlLd9urqqm9zmlLqtxt+DruW1VDYp+9fFP77x6FXQgAEOqZlvO7gDBQ6KlobITh08DSqweIoshMy/ZxYdwNgc4U1I5SKLGMkt50zp40BjMYEGJVVtxBdRJkCa81NVcnlgqLIqEYFSisy3eI2LYvlFd7XjMYVupiyvrzg6N49VFCMR1McmvH0TtIKDrI8YMMZeVnQtpGGBsMcZWdMZ/dZbgKRjKIq0TgUkSwrQOcYo/C+Ra8jrmlZ1J7LTc2qLalGM/TaETfLm4UQO2dwCAEXfb9pjERUsTU3ZXNu04hj2G7gsN8x9TIphSdSTU60PMH/RctO4+Nl46ebSPwGYpanDT2kb4BohKLpr9frHabx9OnTvtLn2dlZr9kBfQ+CtJ6PMC8pRnZ6etrfszAX0fpFgAm8JVaL4NnS6lBgi3QeUg3yRY7zF43xULjftkAYQhBD603uXzT/VAhL6OfQ0Z02kxEIL1USpJNajLHH7kXTT8dEBL30A5DvRdjLuEpdpnTtpLCUwIBSaTT1WcjvRDlJC8idnJz0uQhDp3g6r6mVIfc/DCNNv3vReH9ReiUEwFACKiCGrrBb3EayGAO5tehagTKMxiWtdzTe4YIiEjE2Q2cZJrd4122QXttQEZ0ZrO4W4uXVdbfBiwJjuoWYGYtrG7zrNmOej9CUfHr5nFF+h3ZlmWSWxnlCaDmZjDB6G52iFJ4MVMayDqyWDsjwRCbFmMuVY1Qdc3rnPsHqbdHrAL6hLKcYFSF4dLMmEGl8oI4F/++PP+KD8zVtXYM2nRcYSN3AWnWbpWP9N1mgSmm03u0+JRtliBW/jGgRuc7wWmmss2w8OTbN/BUSRiobUOZV4ALZhFKFUrIyRbsTX0B6HWMMFxcXfYEyiUJKE9KG0IrWuu85Kxqjc4579+71cIdg1qlASLF+0SLfe+89nj59ugMjDKn32ajP1pCRZ9snCIaWwsvyB7wIi5bnF2tKavmIMBYFIC2olo61OO1lnsQ6WCwWPVOW8U3He5gTIveVRoUJDCdWnHyX3peEj8o9pYl1w3PJfTZN0/eBlvWXaur7rLd9vpPUUhqO7207gOEVEQBCKfYp2m30AQXYEInNCh2usLT4TU3bNoR8TGYzjIGgFE3r8U3NeDbtNYf1eo3brBNzsNM26vWmayRjsh4eyo3B+4jWoFXGet1gbYHKJmhlaRQs6y7c7NmyM+kzlXG9aMjLyLq+ogkwm55wdf2MeTnn+vklrz88wWDIgqOoRrgAwbW0mw3ROWyR4duaxWJJ6wKmqICK6fERJ+S0V0uerxuC1PvfmX/NLig0/ByGtUJfppPwRdfZZwEIIxBGJzH04mhLtce2bfuG5DKvUiwM6GPHhbFIxIhE5aRapmhbEv4nTH21WvXMdcjoJc5dmJBEJKWhqCnEJJqslC0Qy0Mp1bepvL6+7iNgXgal2PJtkdxrGgEDN36mFLqL8aYsc9pnF+gtNrm/NHMabvwhablprXXfW0D8CcKAZb2kncdEYRANvY+Q21oGKdQE9P4huT/5fVpqQp5PhJfAidJ4KC10l47ZUCHap3SlY5paDPu0/39pfAAETQwGpT0xaiLgY8AaRRs0KqyJbknRnqNjQ8TjTIbNjhiNpr1pXZYlvu1w2evlqpvwCNpmBF2h8w63rUYT2s2SGH1X2jkvuF4sGOUZPmxQBlTIaZuI94pycozJDI1r8K7AFEfU9ZrYRp5dXjKdHBOVYbV2GFOQbdvaZEWFLSvOpnPKvCJETVAapSqmRyc7mkKzWbC8eMpyc0lRjNEGMlthGs/icsmyboghdAXblEL5LTxC2DaE6SKnPBpC7HoDRMkC7qo+hO3/XoEKkc4O2S4iBeFPIIpwaHFIcpB8J3CNpOJLlIeE/K1Wqx6akZaN0hpwPp9zcXGxAxVJo5lUwxOhM5lMUErtRBAppfprSR+CGLt4fon/l8YvUmNGqlJKIlPaXlLKE6xWqx24oG1brq6udnwAL8rcTTFxeZ+O5efRy4D1UgY2ZFTyfMaYnZ6+8l4ivETbBXpfiYSyirCXsU/LaosfRaC1tKy0WFgpkxUHvVxbhLr8Lxq/jKdEb8kzCHQkSoVE+kgGs/g4ROincOUw2uePguL2zVVq/b0ogOOL0CshAOThQuwyXWWwfOi6XUW/IXeXlCqQmRG6KCjKGVGVoLrJzJRm4wNgKUeneHfVLwRjDGUx7jQDY6nXG/KywmqDzTRKO7TOcc6jUCgyQuwyapXWdAGolrIoqZs13oFWJeiW6eyEPC+7mH6lWK3XTKopbQOjao7C0rYRrS3j8RH5aILzCuc8eV6glCaEJevVJevVFT56fAiYELiqPSrrWhBumoY2RiJbDJMbBuBU7C2CGGxX4keB4aYJBnFXq5DwT/ndy4YJ9jm0BBYRPFaap8g9SjhgWite4v+Fkcj3kt4vlSUloSwtC6CU6qNS0g0u1xOhI92lhElJuKFonbPZrGcMUoJ6aL4rpXq8/+rqCqDXiOVcUqFyyND3jdkwoimdr3ReU0dq+ty3TUOmlGqoIkTF5yL3JNBN2kZRMne7zn67zv8UnhHsXdaBaPwybzIOw3GRl5xDxlSsgVQQiWIg9yq+GSk2mMKWWuu+LpVYAlKqXJ4lFUTpmKU03Bf7AjKG6+E2rbpXQtkTUMMAACAASURBVADA1sRSnT664xzxjkIFytxQmgllNcPoiqACTWi77OEQMZkiWCizElxEx0D09OFlHk9ULWhLNZ5gDbSbul+so1HBYn1NZhXeR1xQuNCVpYjBELyiKHKWq2vUNsUq4IkBMmUIOIw2KGOxpsQTKYsJlojNKvK8wEUYlyVFMaEcFbTthroJOCJNVFSzY3JjOqERcy6vGz49v2Sx2qDZal7x89X0qMCF0HVYGxT6STWIGCPbwb75/5bpRZEMqSNONomUgx4eL45gwddl06d4sjhtJVZbmspI1u9isehxZNnUKfOSY4DPOBeBXssUAZQKH7mn2WzWM3W5hpQ0EKEm97Rer/s69WkJiz+K5JjUCkhpH0N+GRBQKnDkfuBmfcmzpxqxROmIli9hmUqp3qIbjUY7juFUExfGnzJ5URxSgZiWahBnvPe+7xEh104rpgoDl7BUEVISsZU2gIEu3j+NZBKrQjLF03yUFwnz9NpC6X6RcUh5YeoTGp7nj0uvhAAIUaEMhDAwLXEYFVAhkBlNXkzJbEZwLQqPDhAzi45QGMtIdYkgrYZqNqVZLblePCd4x6QcY7XG2xybQbteUhQGoseajLr2aBSuDaw3LdHFrYaoIThUKGg2nQPQaI3WlqZ15HnJNm6JGDTj0RHa5mjVkClLlhlGs3nH/CdTjM3RxuBdZDKe4dC40HJ8co+mcTi3IfqAxnBVL6h95Lrx0NYE7FYgBYLWN9p7gm0THUqDD6FrsakkUmi7YJQihpZAROmuFWfPOF5CEFDKKIYmsTB2ifCQTRtC6M1owfFlQ0kphouLC4C+wJhsRonKEuEhsI5E94hGLzit/E40PXFYpnAN3DCJtCuZQAFptnEIgclk0j/r3bt3+6gfIamBk7aFlHW/L6JGKGV0qRP4Rfjwy2D+cp2hkIHPJoVJT2DpxiXQC3QKn/hzJGpGkvdEkx6NRn0JidSHIwqD/C+MUxQCERhyHbHGhhq5MG6B5OQ34gcQmFHGWCApCUtOLQSg7xzWB7MkY78Pux9aBCJ8Un+BHL9P4N6G1f5KCIDUCQM3ccHRB6I1bBpNqzJCdLTNEq0iNrPk+YiN1mRFTls3hPYaa0vybIIngoWmuUC7mkZnEAIjqyHPCc0GrTpn83J5TYiezWJFXtiOSdutcyfP2ThPOS6JCpRzrNc1eQ6uBaM9ZTGmdYE8L/Guy2k4mt9luVxQzO5RN4Gj2ZzQrPG2ixbxsYsoyUcTbDkloLFFic3GXURQdDzQFR9dLFg2nuuFZ9M2O5jgi6IEZMF4dwMHaHXDPBSWLvMXpBzoUFu/DUqZ0z5TV5ixOAjFUScMXBiymNnCWIUZpI42ycIVzS2ELoM4DfVLGbpoirLRU0hA7l0gIqDPNRBHn9SFl+xTqSEjPgFJCBMBlo7xgwcPOD8/p67r3jmcjo3Qi5jGEOYZapnD57jtMFC5j33rL9XQU4Yqx4rwFeepjLMItM1mw9XV1Q5ElzpjBRoSpSUdO1lLcg+ptSE0hAVFWAh8KPCg+JYkZFUsFKAPFBC4UawECfeV9p8vgvD2Ceahf2c4Z6k1MBz3L0KvhABISSYFwChonUfpnMZtWDbXZP6KPNc4b1EqoIsxMXryqFDFSYfz0WB8wCtFMe46BUWtiJsVi6tLRpntSgosF9suUjmudWTVmKg86/WSSVHQtI6yUtSNw8WI9xFrc5yLZLYz/xUGa3OKAoiGul5jqxwXM+anp1DDvTffwJuMrLBoU+BUgTWqX2i6acjzkrIYocY5Td2SMeHkNPCtr7/JxeJ9rq5368IPqdcGB3u9Z+w7n+t+I2j9cgrBpfeV3kuqmQG9Fg6f7S0rWvzQTBYNUJi+911t/qIo+jhsYSJpga4QuszixWLRb/a0L6wwbtFGRQCJQJKwRhEqZ2dnOxEjYrmE0OUhiKUg/gh5ztFoxDvvvMP5+XlvAaTfD4XlPobxR4V/7sObb5NSJj+M9BLmndZBSudbLDWgD8UU34hUB02zqCWKS2AkUQjSsM/0vkSYDxk/sCMwhMQJLfMvVocwdFmXsh7lPuR8aSiz+DSA3lJIfREyZnK+ofU2nLd0/vdZDF+UXgkB4NPwRR0JMdBVPTZAQCtPExv06hLXPqbWOdrOyCeaUVYymR/hAvhmSWhr/EahdIbWJcWoa+Z8ff0EozXT8QytPev1irZxzI9OtqVeMyKaIh8RQk7tW4pqitEFVnnWm4bSRJTV2yiGSJnloA2ODse8vlpSljmFHRNDoLBH2MKxrhtOHtyHJL5cqRyMpipyVNxqwe0GazOKPEdHaFsobMa4tBijUc73CVydP2Cr+XGD+3aa/XahkSyosH0BPrQoHVE67LgUgrv9MKB9Tq/UUSo4uThypZuWOISl2JuUUBamIFE4UmZYmses12vW63Xv7JXrVVWXDCiwgfh+BLMWy0P8BnLfEukjncKapuHs7IzlcolSqvc7CMNRSvUMX8a+rus+u1jyAKTpzGKx2EkEG/pp0vdDbXbfMTJGafjjy3Dwp4xtCEmk0IU8m0AxadKXwGxpPR2BUESwSx0osfrE2hoy/xTOCSH0iYUyNum4irCV+0whI+kNIHChWCHp/Yt1IEw5hZ6kTLnc/+dp+y8S0sMcgJdhwQm9GgIggQKUsii11QwVoAwuKsDg/AYTAuVozHR6RjWeEpWjXV+jTNkzkaqqaJtA2zbkhUKpmtxqMDkxd6zrFqU15bjT9jwKbQxZVtA4R1CaEBXWWGrnUWic22YW6y76I8SI1gaTVyhtaJwHY5hOj9hsGsbjacc0pgWZhuXiOaPxlLwaYWJOVk57rTPEjrlVVYWv1+gsQ2Ul1aSgdjV3Tib86NFj1ns0AwAf251NKItSs7v5d7HbLVzA/qSU26ChtiIMKmUQAv/E2MWLTyaTnqkKY0graMYY+yqfQO9gnEwmPYMXjW29Xvdam2iRktov8eIiLID+szTsULDjyWRC0zSMx2MuLy/7ZuECOaXVSGOMOxCVwB2pvwO6yqGffPLJzpi9CIrbJ0iH2mOKFafM+GU5gWWdpfM69AOk0I3WXanmVLuWHA7RrNP1G2Pso2/ENyOOd6EUbxflQITlUJNOoTPxOclakvDjGLtIILH00kqgMcZ+rcj+S7O9JU8kzQwfCgCxjoaw93B89/3/Iivhi9ArIQBksyvVlSsAus5fShFVJEZNkDIRyrBsrtk8i+jzJ8S4Zjw+YX7yGtPplNVyzWKxQAWFUpHMGGJYkWea1kPjWrIi53q9YjIqWT67oKw6OMBmOShN3SzJ8gLXtGgUsfXkVUbTbLZ4boffV+OSEMFHyGyGXzcoY5lMuoiVzGY06w2ZWWED6NGY3Fh0OeG6XmO9QgePsqZf2FWhsFmGtjnogqO5ZZQ/ZVaOuN5c7cV5uzISEsr22cqDYhnsYwRBMoVfkgM41UBl44lWLpqTaDl1XfPs2TOeP3/ea9LT6ZSyLPv6/3I+iQKSkD0JDXXOMR6PefLkSR8uKA5DySlo27ZnTMIYpIAXfDZhLYTQN38RTe+TTz7pSzlMJpOesQ8bmKSF4IQJpuUJptMpz58/3wlF3If9vyhU9GZ+dwW5aKAppHqb8zq8V9GiU+1V9rQ40IdQiTBJOWfqwJcIqdRHkOYNSASQwG4pFCP3lkJNMv7ynQgDUQ4kJFdCPsW3IyQZvhKhJPcy7MOxXC4Ben/VPu0/9V3Jet6H779IEKSC/ovSKyEAvO+av8QYUToxeaOGCDYalFpjlSEzOXXU+NiChqOT19Dacr24IC4ANNZmLJ1iXG1r9GQZFxeX3SLc1tc/Pj7p64hX1YSryzXjcRJb7wNWws58S/A16/WKk9Mz8jKwWK4xWYnyUNoSXY4YBYvWMJ6f0bae8XiGqxd43y3oDz/4Q6ZHpxzffQ2bbcs3mK7URZ7n6DxDA1mWE7Qmr3K8y/jFX/xTuNDy6Le+T+1aDA0+Zl3OglKEEAXdwdCVUFUhdulhim1xvSQumgRKSqCh244CGsIP6WKX/3sndRInLhi/MG6p0An0PXjTfgHCJJbLZV8uWjS6xWLBdDoF2GkYn24mcQBK31+xIFIGJAJJGIk0IBEI6/T0lJOTk55JyDmyLOu1XoENJHLpT//pP83V1RXPnj3r7yVlJqkmn9I+xpBq5fByM71fhEOnnwvzFWtIoK+mafoGMCKIheEDvRYtNfy1vikeNxqNdqJ1gJ3xTsdtKPSGYykCQ84locSiyYs1Kvcp2P4+ptv7LLd+D2l8P51Od3JE5Fop3Dd0DsvfVLiKUB1aNLdBr4QASCmGG5wYUrPHoEyGLaaU+QjvQ+eIXV/SBIuyBZPjO8So2Kwd43FBZsCYziF3dHTcRSPQOXKfPHmC0had5zQhMprNwRqaTY3OC9raEb0iy3LKSmOzjKurFcoU+LjBA35brtpmBdpkGJPR1B1ExbphPJ1xpTUnJyedxnPxCONb3PI5TuWMJlN0XqFVRteO0TCeTvBBYUxBaLtmNcE53rx3l/nkJ3z6vKH1AZubflGlWoOPN8xcxwRPjJ+NFvHeY3h5lUDTRS+az3BjSqidbEbB66VsgDGmN8clDFQcgGltdom+cM6xWq0YjUb9uQS3FYgirdkjEJScJ8XyRWsViFIYkIR23rt3j+vr6z7Z6fHjx30oo1KqzwgWTTeNHpKx+dmf/Vk++eQTzs/Pe2HzeZt7n1aZfrcPc75tGlocQ8tJSKw6uIF5j4+PiTHy9OnTnfmT4wVzl4Yu8lzipBV/jaylF5VdGBZWS+9JBIacQwS85B1I5rYIAnnmYURZag2kyYxiGcpcDGHPVFilNIR60ufZN+63Qa+EANh9GKlfo5H6NTFGdHtNrjzEQF13hbs2mw3jwlCOZ9jxEd53G3c0HuHxGB2p63UPERhj8MHTBEMxnnXe/xi4uLiiqkas1iuc75K/fIigDDoYrFaEqNAmR2lLXQe0ydAmo3UtaMN6XTMeTVivlqAtykauFkuq+QlOZYzm4625f45eO4z1BFeBBWMNWltG1QTnA+icohixQWMLh19eU7cbDIEyy9kE1y9EgW+EufVjmoxt5w/4/LF/GUxjCD+k70UgSEemtE7L5eUlWmuOjo4Yj8d9mY9UuxPmnTr0RDCICb9YLHqmLfjtcrnstXj5K88uWrucX8ZuNpv1foA0KshayxtvvMHV1RWXl5eMx+O+L4E0Iqmqqmf+aUVJeX6JRBKntUATQyhHaMjo0s9Twf4yaQhBDK0A0WqNMUyn0/4ZBFYRRivOXcm+FcaaFsgTQbwv8So9bzoeqRM2ZdRppJWcWwSuUorptPPbyTyKFi/3KccJxj+0NCQBTvxSwneG8fxy7X3+gaH2/yKmf1v79ZXpD9gvpm1p44jGx0DrW7K4pFAeZSw+QPQe37YUmSbqinI8oSpyyBQ6z2hxZAaIkahy8nKOKQqC1iw3nXVhTYHROVZnKCyBbbefrKQNhjr6rgyEUgRr8VFRFiOczvDZBEVB8F3hOGMUhTWMJyOKqiTqbdmCums1OZ0dUW9aqGbMpqeMphNsNcErTTUaY8Yl2bhiXW9QpiDLClrfUhhNkeWMp0d85eHXuz4GPmC12tkgKmpU1F3jd+zNS9uuv4IyOK1xSnXdwZLx9kSC6v7ellaRUuqMk0WbmtKi+ad1Y/I872uwp41VUs0NdiNGUihIwi/lGiL803LAcGOCp2F9Sqk+EUi0QxE+Mm7SBKaqKhaLBXfu3On712ZZxmg06iEE8V8IvCUF4SaTCbPZjDfeeKNnHD8tDZnGPkqf87YFwj4IT/43xtxk3ycZweKDSRPtJFJHmu3I2IuvJY0UE1RArL0h00/hkqEyJL4Q+Uzw/CETF6XA+65S6NHRUb/u9tVsSs8jZa7lmc7Pz/uuYkNcX5SXFB4bOv/lmKEze988fBF6NSwAZHNtPxBfsO7q+eumxQLRB1AZyhisUmhrKeZ3cDpncb2iyjTRNZRZhY6BVbNBW4MLLdZmtHVNORqjVVdUra5rrNKU4wlN68nLMTYrcGyoF9dMRhn5aIRv19i8IDhH6+NW+7eQZR3mbjOaZgXaMJrM0RiyIifPJ6wvF2gPxljW1xe41QplxhTjKSrLuwSywgKa6XTe1RTSAVvkO6ZmURT8wrvf5Mn/+TvUa4/XESPOSrqWjtpoSBa+CyJM94x53E3aeVmhZqkmNtReUxNZtEY5TjTHq6urHSeiMATRyNKCcLKhpTm4wC1K3ZSSSOvwSLy5mPEp05f4dLkvcRpXVcXFxUWPTRtjuL6+7p9JtEV5FmEMEr4oEUby3MfHx3zrW9/i2bNnO6UeZI5STTcdu8/b/MN5vW3rbsh05b3c6zDrOWW+QC9wQwiMx+Me65fP0jIfafe24bXFwfsiq0i+G1qeKfwnlqGsDVkzfVTe1kqFXeezhPTCja9InkEihSSnAXat3335Cen9pX6Bz6N/eZzAKumF6R0xKIICHSOaBu3W6FijNdiiJOqyjwW+vrwkswpcy3PXoJTh5PgM7yPTyYh1cLgYIEBWdBixCnW/6HxUYC1aGXIsy7oBY5hMj2iDImIoRxOiaymqMUEZqjJnky+JKiMrNG0IGGtxIZJnY0JQ1E2gmpa450/ZbBzj4zmLZ0tybbsWlAFyk1NOpxC7Dmar5YbxbIxSu4lPkvD0ja+/zv/1u7/NYu3RynYwFYBRxAht8HSGz/ZzrQixy6tQsSurHUK4yR9ITHlhNrdJabSFbLiU0s0hDlbZTIKrS5E3YwzHx8d9zH8fQrsVjnBjgkukj2wiObcwdhnPVAjAjWYosIMkCMk5pBLl/fv3efToEcfHx31ZarknGdPUwSiQkFgowsAF737rrbf68wgjhd3kpdSRmM5ZOo7C3GQvpTDZbZLcQyqo5HlSR6eMYxrGm9ZFAnZqLAl8kpaMTpvHDKOaUggnhQPTdT0cyzQyKRVWacSQNA8Sp3UqcEX5kLUg4y/3IcJa1lLbtn0QwE9DKVyU0hAWui16JSAgrQJaBYgO9DYCQ0GmPYaALQxaQWYMZTFhMq66fgEuMJ3MibElywxVOe376q6adRd7bXKm1Zwy12gcrllRu0gxnhG0wkeHc9s6+zYnzwuM0kzHE6pRic4UhS3wTmHLCdaUlKNjALKyoCxHWKXBaILK8VYRdYW23XmK6Sn1colbbSimM4qTI2xZMZrMKaoCoqYaz/D4roeBzonaorWhbWuca7b35ziazfnm13+GaT7CBmkA00X86BDJYhdRpFRX88d6TRZM91KggicEh48ebbrmNVZprNLoCEfHv3frc5sy/qGzUEx6eS/MIq0MKRtOKdWXVk7bPso5xGmXms2yaSTOO8Wk4QbzF81ftP40CxjYKdstv5nP530DEAkhlWsJBCUMfj6f97CFCCmBu6y1HB0d8e677+7AW3ADn4m1MHS8vkhoC0OU3912RNDQdyKWqnyWWi2iwYuQff78eZ+p/fz58x76k/NINI5kUMuYyOdpdi3sllhIhVB6fzIGIpDkHgV2E2WjLMu+wqd8noYLCxwpjmixGmSdCsn6kYqicu/pfQ6FaDpvqZWTQr1DH8BthPeql4H7HuhABzrQgV59eiUsgAMd6EAHOtCfPB0EwIEOdKADfUnpIAAOdKADHehLSgcBcKADHehAX1I6CIADHehAB/qS0kEAHOhABzrQl5QOAuBABzrQgb6kdBAABzrQgQ70JaWDADjQgQ50oC8pHQTAgQ50oAN9SekgAA50oAMd6EtKBwFwoAMd6EBfUjoIgAMd6EAH+pLSQQAc6EAHOtCXlA4C4EAHOtCBvqR0EAAHOtCBDvQlpYMAONCBDnSgLykdBMCBDnSgA31J6SAADnSgAx3oS0r2/+8bAPiPf/mXYozbBtgRIoEYgOBvGmEH1zX8bhuapqFxnrppWKw3bDYbrhaXuAC1gzoaIpYQFUVR4Jzj+M49fDQUeUlAMR5NyfOSIh+RZRmZ7ZpaO9dum1wbFBmtW1GUGUcjy7tv3aeyXVNslRVEY7EKVGy4vr7k7/8v/yurOsDkPnlZMTu+jydHKY21hqg+++zS3FkahEsTcK01Ru82kO4bgbdLog/gHLapyZoV2jWU7Rrr15h2hQFsqMn9ClTXDD76GhVi91sPHo+PAe8ijXf4CP/l73685y7/ePSX/tJfimkDc+AzjczT5u/SIHy9XrNarajrmuVyiXOub6Iu55Dm7G+88QYXFxcURUFVVRRFQVmWfWNuacweY9xpsO2cI89zptMpb731FmVZYozpX3LsxcUFf+fv/B2qqqIsS6bTKbPZrD+PNItPG34LGWP6+ZSXNCuXv+m8tm1LCKF/Vnkv30uDcqG0ibg0kE8/k/PEGPkH/+Af3Nq8/uqv/uoLG4kPG7bv6zkuY2KM6ccuHb8sy7i8vNxpCi/f71tLWuudawI0TfOZuUx/f3V1hfeeO3fu9PMk4zY8l/wm/X/f8w0bvA/fy30M18S+MRzeb7pOUvqVX/mVLzSvr4QA6LrbbwczRMAQVEBpTQiysC1oh7KWECDQ4rwn04Z2O9HBe4zSmBBw0aMBowui0jw/f8ZoPCe0nnI0wnuP9x7nm46hbzflZHpE3ayxJgcsR8djnl884eT4lMm4Qm8FETGiQkQZhbU5o9GEP/Ov/1n+0T/+32nWC4zVuHqDGeWgFGhF3C522fxwIwBuxoH+GK0+u1C6BVAQlCOGSFQaVEZUgYZAjAGI3bV8JLiIpyUER/AeRUB5RfQQiXgfaF0gKgXhZcwr3Xhxs5i11v1GSxe3HCdMW4Sic67/TXoMwMcff8zdu3fZbDY45/rfyXvoNp4watmE8v94PKaqqv536SbTWjOdTvnGN77Be++9B0BZlrRtS57nO4xl37wKY0o/N8bszOmQqQjTTs8ja1XGcsjo930m79NxvS3axwD3vZfrDxmdfO+978cjpbZtOTk5YbFY7AhX+e1wHORaSqmdZ5Xzy+/ktyI0NpsNwF4hI3+HAmc4DvsE3L5jhsIiFSjpcw1pKBxvm14JAdBtJE2MHqWSwQlbZhYjIURUNCgNWncb2RqDMYpMK6w2RKvYbBp01BgcEc3y+oqyHDGbTDk+PeH86XMIgRhc9/JZNzG6Y9LlaIyPDhUVEBmPxzTtitPjo27zr5cQOkuF6PE+Yk3GZDrntdcUxip8swRXEHyD8Y6oI0FFvI8v1ADzPO+ZltadNaK40Y6EmcQYMSYDD0F5otpaFgoCkSh/Y8CIdrgdv+D9VvsPEBTaQNiaJc4F/C0LAGGQwryBHaaQbjrR1oRhyviIMFitVjvnds71GvhisWA0GmGMwTm3wwTlPHme72iFIQSyLOP+/fvdHDdNLyBE27bWMh6Peffdd3n//fdp27ZnXM65nrmkjG+o7adjIa/0WBmbVCPWWu9lSKLpy2diJcj9pAxJPk+F5m1RysyG2nfK5NLv9jFPuc/hWEGnwU8mEy4uLsjzvBfm8iwyNiLI5TOtNU3T4L0nz/Oda8lvtNaUZUld16xWK/I878c+vS9ZP0PLazgv8tnw3tJ7Ss+97/jU8t93rZdFr4QAuNlIuod9YlQo5W8GJ24HKsSOKdBtgMxaQpZRZjlaB5zz1K3vLAkdUNpCcKwXC4KLTKZzNpsNs9mMtmnRxRgFPUOQc+a2ILSOMtfcOZlyOh2jCWTGEn3AaqjbBpsZFJqyHON94OzkhNUnH+PWBl9MMLYAkxPICUFhjCbL8s8IAFDkebEjINKloOgEUvdqtwvfg7foaCE6tM1BdZ8pFNE7fNxqic7jQyT6rTAIkeC2AiLQHec/X5v5FyWBXlINKNUO5fmHWn1RFP33svkEBpLPU8gshIC1luVyyXw+748RJimMQDY6wGQyYTweM51Oew0wy7L+mtZajDEURcG9e/eYz+c8fvyY9XrdMyPYhZPEkoQboZcy/n2CIWUQMmbyPoXKRCjJeIkwSuGflOnLZ/L3NmkfJJFq+p/H9PfBG+l4pPO72WyYTCas1+sdYSLjlh4va6ZpGoAO1s2yfgxkzlLrsCiKfs1orXslrK7r/l5lvmXdpM81ZM6pcE8pVeCG5xgKUpnzdCxfBBXdxry+EgLAmhzUVkIGc/Ng3hDNdnGrDg7yXhPZbqYI0TtUDLiyxDrR/DZo5/AEtMlQMRKCp9msaWzGz33jm3z06WNiVBA681o7gzcRTUQbQ3A146LkeFJSlCNm45K2XhOV6mEAoxSFNeRlRdt4RqMJ3/6zf4Yf/dp/hw+RywbG3pJXM0os5WzWa63pxMriGjKLVACkk50pMEbjM4Mhw2BRKiPGDEuLziw6KBQWVEHWRNrQMRAfA95HXONpo8eFgPcBtMK9JAhoCEPsg39SMzfP834jCDYvDGG46L33NE3DYrHg3Xff5cc//vFnIAb5q7WmbVtGoxGz2YyTkxMmk0nPWPM8p23bzv+yZf7ee2azGe+88w4fffQRn376KU3TMJ/Pmc/ntG3LbDbbgXnkvQgUYQxDPHo4r8NzhBB6iCS1DkWwiBBIn7dt294aSGGj26Z9cMY+uGMf9JH+LwJrCJ+l1yiKgrquewGbrhcR3sLYRUkoy7K/hghNGQexsMRXJMJ/iP+vVivKsvyMsBs+976x+WkY9nAcUhpaki+C0r4ovRICQCAgdACVDrTqdN7EAgCIIcCWuTiXbbV3h1KOos3wuQciOgRchKgCioA1Ggh877v/nCZqzs7udbBAVt5oUM5RFRq04uR4yunJEdp0DKQN8TMaujCLLB/RNqsOTyawWV1RmAmxbcimmnqzoTw+7q8z1Aj7cyafq2QhpTi6VVvEyhhM0BirAYMtCrT2aO2I3mEUGFpM9MQY8N4QO9cvgUgbAyEGHJ2vIHC7mmIqAIYakHw+fLYYI1mW9cytKAqA/q8cnzI10e6+973v8ZWvfIXr62vquu7NetGIrbWUZcl8PufBgweMP0uXHQAAIABJREFURiOstdR13Y+94MPCeLMsQ2vNeDwmhNAFHFxdMZ1OaZqG8Xi8w/RSjH84rymTS58Fdi0GYXTCFOQ5RNjJ+9SCSscj1fxfhgUwZPb7MOr0s1QIpHMtwlAc1lmW9XMp49a2LWVZ0jRNz6zTc8jfFB4riuIzwiJVOowxvbUvcyoBA8YYRqMR19fXFEWx89tUOA8tn33PPXT6pv/LPct9y7VlXtPv5buhgnEb9EoIAGXFvDJgAgpQMRJ16KCg2Dk7QwhoC8Yq6nVAa9BUqO1kiPmXZ4bV0tA0DXWMKDQOj6Elx6HyjJ9/9xv88A9/0ml99YqyzFEE0JGiqFC+4e7dGfNJRmYspg2oGDARFFCMSlwM5EVFXlhavybPLTFo1otOE5uMV6hwznoZyGav07TCCD1VVRCC2y6MiNpq9VpvJ1opjI50/uaIigqDQ8UOErExYJUntxGtDNFqrNIEXWB0JDYrjPZEClCOzHSLyoacyIbaB3TQdMFEbQcB3TKjGGq7QoL172Oc1lo2mw3j8Zi6rnc2TpZlwA0clJIwjs1m05vsbdv2v5FNW1UVd+/e5eTkpGessvEAxuPxjnYo9+a959mzZ0ynU4qiYLPZ0DRdAEFVVZ/Bf1MfxmcE+wC+kN8N/R5pNE/qc4CbtT60LuR4GaeXIQDkfodwzr5j5DllrlMmnQqxoih6gZU+h7WW9XrNeDzm008/5ejoqD9/6mOq6/ozVhLsQmoxxt7CE0ErAQDPnj1jNBpRliVFUTAej3trah/jTsfgRdZQCucIDX0Bci/p8em5U7jx88b6j0uvhABIpX6M3SBoINoIwW8hnED0HV7tInhr0Wh0lnM0m7Ncr/j40SPunJ5wcXFFlmVcXV2B65hopi1YQ1OvmVcVP/j+e3zr5/8UH/z4E4pc4+uaqsjJlEKHljfeeMC9O6eMcrpIobIgdy2LxYKiKChGFc1iwWg0JgAqtLim5vLZp7TrK956+6ucX1+ixxV/+Ic/5uG7GV5lVFXVbeToMFphrdnRFGUBd5Mc0XqrNamIiQq0xhKxIWAVZDFiDaAtpcoIXqGsJ2YlmVe4TOM23diBwjcds2+cAxSBBuUVRHDxdqGCFBNPTes0OiXVbmOMvaZnrWU6neK956OPPmI0GnF1ddU7fdu27ZmFRHScnJywXC755je/yU9+8pPerE/X12uvvcbp6WmPGcsxYgXIxquqCqUUdV1zcXHBxcVF7xReLBZ9qOJ4PO6Pz/N8Zx7lvTDnISQ21J5TDFkETxrBlEY2ieWSMlGgHxegFwRDeOGL0j4GtO+z1LoR5i9CVeYwy7Ie4pG5knFKHb9t23Lnzh02m82OIJTzww3un1oDIjjlMxlPYf5VVfHDH/6wnxP5vZzr+vr6MxFHQ1/Ei7TxfZBWGhk3tNrkb6rcDNfFUIn4ovRKCIDhhAKYLaNAdcLAe09EociwpSHTnVbm2rrfpF95/XW89ywWC4zJKE7POL+4xDmPthmtixRVTp4pCIbf/e1/Sl7MyWyBtZrYbsjUiBhajuZjysKSWUVe2A6C0hM6HqxRWnN0dIRWFu9qYtvgfcsP33+Pt958nTunRzSu4aMPfwze0G6uWS0WlHmOsl2eQQSUNj1WPIQP/DYKSim1tYpAx0BGxKqIDZFCKzqXr6ZShqADEYvNFK4JGK3QOoDzqKBo1JqMSOE9aE0gUvuAcvtxy9uY13QDpJgm23lNTWCJzmjbtsf8Z7NZD988fvyYyWTCZrPp/DBb7Vy0cmst77//Pvfv3+f6+rq/BnSb7ujoiMlk0juEh+a5fG6M6a/xwQcf8P3vf59vfetbVFXFhx9+yAcffECe53z66ae9NSHOZmH2IgSG4b2plpvCFEPcV86VQgECXch501BKEa5ADxW9LO1/eN7PswZSISWCfjwe94z/4uICrTWj0ai/fxEUIlzruqYoClarFfP5vD93CIHVatVry8LsJXxYrEgRJuIbcM5RFAUffvghH374IScnJ/21vPdMJhNijP1ac871YaPyLLJ+9o1DajWkn6cCJIV60rkbjqc8ZzrPt0WvhADQ1iQbYSvtIlitUVH3kjPGSPSWsN1AmQ+0SqNVy52jE9q2m6ST2Zyzu3f4vd/7LqfTKat6w3rTUFiNVoHN9XPy8ZxJbvnqV9/g6cU1GRm+2TApFG+9+YCz2Ygy60IxM5tt8dkCYy1bw5ZMG54/v2JcVQQiH/zwfY7HY37h3/4OH3/8MdOjOZ/8xj/huJqxevITnj5bosJbHB2fYm3G9PgEVIbWXRhoCKFL/orsbhhUl9iluu+L4LFEMh3IoifrXBbkWoG13axGj80gOI/2OW3dkKExeQZqSSBincPHiGpaorWEW44DFfhlH6WRPymGm2LwouUqpXqG9vbbb3N+fs7l5SVt27JarXauc3x8zHq9Zr1e9849MeO/9rWvcXR01AtcWXMCA8CNSX51dUVZliyXS5bLJd/+9re5c+cO/+yf/TNOT0959OgRR0dHXF1dsVqteuvl9PS09y0APUMZwmHC1FMBAbsMJIUH5DfpWDnnaJpmx8qQ94vFYic89LYpFVxCQ2Yn9wzsCD3oBJTAWGdnZ8QYOT8/753+KcQlz7FcLnnw4AGffvop0+m0Z8oCGabRXPJbEcpwE5XmvaeqKp48ecKjR484OztjNptRFAWffPIJk8mE0WjEZDLpr395eUmWZb1SMvTDDH0eQkM/QEqpMBCtfwgnDccwHeMXQaz/IvRKCACZsG6Atvjadhw0AcIWL45dfLtzDuMtMTgwGusycq0IRAqb4VzDanHNdDzh7bff4bvf/S7HsznXmxUKgwseCJRVwaOPfsKbb73Ns4tLJpOKB2cnvH7/hLLoMHilTB/3H2KXgfr/cffm0XGd55nn7y6176hCYV8JcAHBRaIoUpQiWZZMx3asOHKOx1YWJ6d7nJM+SaaTHHuynGRsp2fGnUw6kxnHjidxT9pL4kxsKVpsWbtERZREiTsBgiT2tVAAat/r1r3zR+H7dAmSdmeEzFHn4+FBAYWl6vvufZfnfd7ntUwTo1qjWC8TiQQp57IUMxkcqIzu3sXU4jKpdJ5MJsPorl3Mzs1TyCbR9AKZmRS1jVbckTjVQhdtPQNoDj+oGioGDt0Bm13RVsNEVRRMTByK0TT4poFbtdjsdcapgGOzY9iJCxQLRdnEE81mF7Ri1ND0KoaiYtVrzd+tNg2Wq2HgMk3MuoFRq2/rudqhF7HsN4IdTxUQh707VMBhIlIU7CvTNNm3bx8TExP4/X7ZIyCiQYfDQaFQYO/evSwtLeF0OonFYrS1tckGLmEs7H9LMEiKxSKBQIBisUgul8PlchEOh5mamiKTyVCr1RgZGWFpaYlqtUqtViOdTlMoFCgWi9Trddrb22W0Kf6eHUIQxtoe9W0lBtj/i30URsAwDJkBie+3ZxQCCtpu+Eecm1g/jmFkz2TEexC/Q/xsoVBAURTi8TiFQoGNjQ1CodB1EJDX66VYLMqCrcj27DUfuB52vFmdwjRNSSgol8vs2LGDrq4u8vk8a2truN1uCoWC7C0RpAGv1ysJCqVS6Ya+i1tF5vbv2bpXIgi4VeRv7wvZ+tzWc/j/ut4TDsB+4bMZX6ubncEqCsomDt4sDGugqdAwMQ0NRVOxGvYKvwK4KZYKRCNhlhfm2b9/lPGJK/g8buoNE+omqkOjJdJCNlcm1hqlUCqiYtLRFsftdKCpm7CL6Jat1zEx8Xg8qJqGouvomka1VkbTFBpGHRWTK5ev8tbYZXKZNLqqEI1G+amf/EnOXLhAPp/DF3BTsSp4HZBdXSQQCGBFmnijU29Gb5ZpNZu1FAWLJjVVUxUcZtPwa6qKTgMdtekUVAVFadY5FFXg7Aam6UDV66iGTkNRm53LqoZlNI2oaTUkFmpQobzNGYA9Zb1Zqry1oCbgDcEIEam8ZVmSoim6cNPpNB0dHQQCAWZmZqTxVlVVQgYrKyvyd/T09NDa2iqLgIJlVCqVmmdgvdOMJ5rGhEEtlUpcuHCBubk5gsEgDoeDlpYWstks+/fvJ5PJUCwW0TQNj8dDMpnENE3a2toktCEyHTvL42bR/9a6wc0cgYg+xX6oqnpDsVsYfrGf/5LLXtAX70Ms+9++VRRsj7I1TaOnp4e1tTWq1SperxdoGmu32025XCYcDrO2tiYDBpfLdV0xfGthX5ypyATFtTY8PEwgECCbzVIsFkmlUgh5iEqlIjOulZUVmdnF43Hp5DOZzHW0YXGW4u/aax9b37PIiOyZ/tY9skf+Yt0su3g36z3hAK732puPTQVFsZoZAGBtUhl1S6ehNLD0BqbDxDScNBoGaDqYFi7LT71aRtedNOoGwUCNQjZHyOunu6+XKxPXqJkKbp8HGmWCPpXV+au0RSK0tESIBF04HTqW2exKFheB7lCpVwxqpSJuGyWxVihRqRRZXVpkeXGJ2cV5Cpl12qIx9u/fT6FQYHZ6CkfDoCPWhmVZtEUC1NQKplHh8vlXiHcdxOVxE4rEaIt3UKvUmzROqmiWiVMFp1lHN6toGDgsEzcWTsXEadXRVAUcGqqqNBvfNBVVddGoN1DqBqpewdg0IIZWxqGAS3OguTQsRccolHFZGpqxvTUAewawtQ4gjKA9QhJQnz06Fze0iP7Ff6/XS7lcJpPJMDIywuTkpCwga5pGNBqlUChw8OBBqtUqLS0t8nWJCNqymjTTer1+AxZfqVRoNBpcu3aNkydPykKxZVnyXAcHB5mZmSEajeLz+WTEXyqVmJycJJfL4ff7aWtrA6BarQLXM2DsSzgEO0vlus5wWw1B9C5shSDsFFZAwkTbueyv+8dFpQLLF8/djEkD11OGc7mc7LFIpVKS+VOr1WTE7/F4SKfTUv9p6+8VRrNUKuH1emXmKCDBWCxGpVJhYmKCarVKpVIhEokQDAalE6hWqySTSdra2qSDTaVSsn4hjH6xWCSfz1Or1SS8KF7Dj4LJ7EHAVoKAPWvYWj+wZ4jvdr2nHMB1qZvV5OwrioKKibVZC8DcZM6wmT45RAOZScNotoBrDh2z0UyB65UyLpcLp9NJKV+gv7ebQqFAud6MMstVA7/Xw769I80ofDNSqNerBINByQdu1Go4dB2v10s2tUGtVsPr8ZBdT1HYWOfEiRNUjDp3HTqM99o1Pvbwwzz34kvUVIt0uYzlcbO2sU5bWytnz55jPZWhbiiEWjrJJjJ0dHXh1XdxNbVEvLMLzaHjb5iYtRq60wmNBhomOg3cioFDUXBg4tQVVF0FTUVzODcbBHQsBTRFBU3DsBxojiqG5kBzONEcTkxVx+lUMUwVAw1TVSltcyeYvcHtZsYObqTWia/ZmReCziiKoKZpyptN13Xy+Tx9fX0yknO73eTzebxeL4lEgoMHD0ouuWEYuN1u2eRTr9cJBAIoitK8LsrN6yWXy5HL5Th58iS6rnPXXXcxMTHB0aNHmZmZIZVKMTY2Rn9/P6urqzgcDmZmZqhWqzgcDoLBIKurq7S2tjahNpeLeDwu4SzxOsQNvjXqF7CG+GjPFsT3CqaK6Hmwa0rZoaLtdgA/DnrY+rwd9vpxPyOKoeVyGafTSWdnJ8vLy7S0tGAYBl6vV9YKFEW5zoEDMgsU14s9uxOsMnHNvPHGG1QqFVkf6u3tJRwOS6hJ0zTuvPNONE2jVCpRqVRwOp0SQurs7JRSFdFolEajwfr6OvV6Xb6WW8FC9n2x3wtwYwf41v0R68fBb/816z3hAOwRi4xoLBUBBymKgrrpACypj6OjWA30zY2p12somhvdtGgYNSzLCQ0Tl67JKCCXzaLrOvtG72RsfIJSpUYoFMETCJHPZxkcHKRcbR5ywO9HVRQZ7fu8XrKpNAGvh4ZhYNZrJNIpfG43Tz3/Ah976Ke5NjXJXUeOcOjQIVKZNDPzcyysJijXayyuZhgY7GJlY43EyhKFkkXQ78WnVKnl84yfnWFu9goDO/eS2VhG1Rx4LJVdQzuolip4NRNd1AEwmti/ArqmoGkWaAqK1oTEUFUaFqCqoFnNGoaiYJkKiqaDpeIwVdAVnIaFs2HiajRwOivbeq5b8Vj7R/uyMyGEMRTfJ7jYdl0bUXA1TZNQKCSVHUV3rnjc2dlJpVIhHo/L7l1xIwmxMafTKdv9i8UiHo+H2dlZPB4Pjz/+OJ/4xCdktNjb28sPfvADpqamWF9fJxgMcuXKFSzLIpFISMw9HA43e1A2tWZWVlbo7+9nYmICgL6+Ptrb2+Ue2XH8rQ7AzibaCnPYjar99wgJBHgnat7OtdVgiXPbapC2Gjg7H39rPWQrtCGcvGma9Pf3s7i4SCgUolQqXcfoEcZSROii9iH2Qjj+Wq3G6uoq/f391Ot1Xn/9dUKhEAcOHCAajRIMBimXy8zPz6Oqqsw8pqenyeVy8vppa2sjk8lgGIZkH4kmQQFhib2wn5GAHG9VN7DDpPauZHs2cKsg6t2s95QDuNFY6LIYLL/XoWCx6SFNHSEj7djEPlUswsE2yd7Q3U50VzPSa4k6qVarLMwvsWOwn5nZecKxVjp6ejAazSjB5fHg0HTyhSxuhxNdaYpBrSVW0RSVUr6A3+lkJZnEqaq8+dpr/NbvfZYLp97ip+7/ABeuXeXFN1+lXC5z9tKFJqPA4ebjH7ifAwcOcObMGSIuNxcmJglGfFybvUZrKIjL7cKtVCivzVKvKZgWRNo72VjR8WgaLr8bxWGiKhaaWsXtcaEpCk7V1TT6moKiKqCoWKpKUzOoSSlSRODlbl6YiqrR0HSoKnhsBUPPNkeKtz7XG2V07V+zX/QC33Y4HPKGF1G2gIMEXCC6RiuVCm63m0gkIgu8Pp8PVVXJZDISVzZNk1wuh2ACOZ1OJicncTqdvPbaa/zCL/wCGxsbVKtVLl68yNTUFDMzM5RKJXp7e8nn8/j9fu69915OnTolawGVSoVMJoPH46FQKNDS0kI6nZaRv+geDgQCBAIBnE6nZIGJyFYYf3sXqJ0RtHUP7ZCScBAiy/B4PNt6rvZzE2trDWCr0RKvXRhEe4OTcPAC2hKFegHbpNNpotEo6+vreDweyf4KBoPU63U8Ho/8+6JzW1Wb9202myUWi8mu3vHxcRYXFzl8+DCtra24XC7y+TyLi4skk0lyuRz1eh2Xy8XCwgJut1vCOm1tbSQSCSyrSQ8VUFUqlZJZWSgUolwuU6vV5H0livV26FHsjX2v7IV88f32psmttYB/NRCQ3VDcAAUpyqYTEG/WBPRNWMgCNqMd0wKaheJisSTFntzuMD7LJJfONDt5Hc3mmXKpSiwWxxsMEm/rAE0nGArhdLopF0tEIhHMusHG2jotLS3UXQZOVaFaKPHEY9+ls72NAwcO0NvbzRsnX6NaLHHh8hgTk1OY1QYu1YlbUfDpOnfdeTsAk+fP4jLrPHj0bjQTltbWOLxvH/PJNTK5PIVShampKfz+AOFIlKpSpVFap6sliq/qIR6L4NYsAk4VzWygKhouTcVUdVTNCZqGqSpYmoaqbEZaqopivoMvNxoNFLUJGVlOB6DS2Iy03JXy/6/nal9bDdvWNBneaepR1aZMszDoitIU7RJRYEtLCy6Xi66uLnRdJxwO43Q2nX8oFMIwDFKpFJFIRBqKarXK+Pg4Xq+XQCDAsWPHCAQCnDt3junpadLpNJVKhVAoRDgcZmVlhdtvv51arcb09DT79u3D5/PxyiuvkEwm2bt3L6urq7JYOTU1hc/no62tjeXlZXK5HN3d3TQaDdrb22Ufgdgbe/RvdwD2PbHXLMS+CIcHSP0kuy7Odi7x9+2OaGuEu/VrcD10YYe/xPcLGq+AWsT5BAIBSqWS7NS1F79FxC1qQ7VaDa/XK/tDpqenZeQ+MjJCe3s7iqKQSCRIJBLyNXR0dJBMJuns7MTv98u+E1VVmZycRNd1IpuSLiJrFLTSSCQiISWx/3Z12pv1Zdj3cCscdLN7AG6UWX836z3pAMBGG2PzOfnddk2cdzZGVzUU0wKlqXypqxpO3Ul9k0LqCQSIhcOkUik0RaVRr2IpGj0DAzTRdRVTUSXLZGFxjsGePnKZLOlUiva2Tor5LD986kned+99LM7PsnfPHqJtrcxdnuBbTz9NxTRw4ESpN/jZn/1ZIh4Pd91zhOnZaeLxGBcmJliZWcZcduEO+Di2exevvv4GhapKtlDF59Wp6bBWyZPLGVirC+SjURrFNtytrXS5FSzLwOlvUtO0zaY0TdVQ1CaOrygKpgYoGg0sVNNqsolUBctSMbR3oAYDBcOhozl0XC7HdZzp7T5XuLFJ5lZwkL1AtpUHLwyciIaEcc9ms0Cz0Orz+ejp6bkOUxcNgsVikVgshmEYZDIZyQIZGxujUCgwMDDA0NAQhUKBF154gZdeeomNjQ2GhoYwDIOWlhaq1Sq/+qu/KrOBQqHAxYsX5etub29ncXFRykXYexqWlpZoNBpEo1EUpcn+8Hq9Uk4iEAhc1zksHot9sxsLEU0Lx25nlYgCsohgt3PZse2bdTTfLDPYWufZ2v9h/5rL5cLv91Or1WRNRxhWOwxmV40Vf0vUDkKhENFolHg8LqnA6XSakZERLKvZiZzNZqW8h8gqDMOgv7+fRqNBPp9nYGCAcrlMNpvlwIEDUpq8UChc12RWLpdJJpOyriNgO1HEFxnOVtrvVsdofz+3yhDsn7/b9Z5wAKqiX2cUFEVBUe0pJfI5hEOwNoslymbhqLFJN7MUHO6m3IJlGOi1OoZloqsuitUKiq7hcbrJmiaRaAzT4UFVFDTFQjEb4HBSLpQIB5p0P4dLB9ViZuoyb795klw2zeNPP8lPPPAgJy6c4/Fv/y2XV5YoFgxuH91P0GXyE++/m2d++DQHd48yfWWKqbl5vvz1v2NocICJyRkOHvJRUyxeeuL76LqGoeioKhRLFUwTXC4Hal0h4g3g1lx4A0EqpkEqv0E84MUb8KPpm3AQCqhNqmxDbaAoGrrVFNFT0EABS6c5E8AyMQ0L1aGimiaqQ0dzeNA1D5pqoCvv/oK67lxt2K7dOP2oTABu1Hy3/w47ndJ+Q4m2/kwmIzn4QhRMKElqmkYwGMTpdMrmr0wmw5NPPkmhUJARn9Pp5Hvf+x6Li4vMzMxw77334vV6GRoa4uzZs+zYsYOxsTHGx8dZWVmRjjMYDJLL5Zifn5eFR8H4qVarckqZkAMRhiOdTl83wWxrU9fWvbI/tuPEducgYDN7cXi7lr0D9lZOfOsSWYp4XtBDFUWR+6coioyYRV2mpaWFXC4nMzUBadn3RUBIguEjKKOqqnLlyhVJ1xQQotfrZXx8nPn5eRkMCMmHeDxOf3+/LPpOTU3hcrnYsWMHKysrZLNZ8vm8zB5VVZXsLvFagsHgdVkrXN8NvbWwa9+frXtnvxe2C/axr/eEA7gZVGB3AFsjRuEA7A1kSuNGvrHL5aJiWTgsC9NUwDRRFQ2n28VgZxcefwALlUKhgFGv4/T5qW9GEa3RyGYa6cfp1PmnZ5/jycee5PYDBzl69zEGO7pxeXx8/9Q53LrOUHeUX/zEcf76L7/GlTdD9LX3s1Gp870fPElyvUhfRyvzC0t85MM/ybOvvESmWGXnriH6+vp45tkXcDkcNBTQXRouj45h1CkYDQKuEBOTVxhsCdAfHADLwCqU0CIuHG4NzQGW1nSSWnMKAChWs39ABRMVRWmKySmWguZQMU0Lq240J66pCpq2KUOhbW+kuJUFdMssb4sjsJ/zVnaQuOnsbfnio67r9Pb2Eo/HpXJmLpejpaUF0zTx+/3yJu3s7KRWq3Hp0iXy+TyGYbBr1y76+vrweDycOHECTdPYs2cPe/bsYXJyksXFRT760Y/yxBNP8Pbbb2NZTZkKQTd9+eWXqdVq3HPPPTidTl544QV5Y3s8HtnnIKCo+fl5WlpaZK1CsEfsGYD9PW7dq62ZkoggRRFU/I6bCYq9m/XPZQHZX7v4aH9NdojEXvQWTt7n81EsFiVLT+yLHW4R/SKiUSyfz1MoFAC4dOkSra2tHD16lGQyyeLiItPT04yOjsrswufz8RM/8RMsLy8zNjZGKpVifX2dI0eOYBgGZ86coaWlhdbWVgYGBkgkErLIDxAIBGTBWfSECAkJeOce2NrP8eP28Wb3jXjux53Df816TzgAO8/Z7gDg+mLHVgdwnQHRru+gA64ruAFNTL+8geJ04wmH8fuDNGoGHpebSqnQLMA1DMKRd4pLPkdT/bFnYJDf+M3f5M2TJ7ntttt59oUXMYHbd+8k4ndy7MBeLp06zfvv/wDXFhLMXr3GxelJnF4P8Vad4w8c5+L4GPv37+eZl19kZPcwhUKRyclJfukTn+CHP3ya/bfdSbla4syZs+zeO8yVyRlQTFxuBz6fj1KpxGq5SExrp+Z04vI4sTCwGtqmdIYTmqPBQLUw2eylUNWmtLS1aVDNBjQaKGajORVNpOLbLAZ3M8NvPzP7Yzv+aY9y7I/tsIG9sCkmQFmWRTgclkqOiqLIecH2QqOu6wSDQckQsqwm9/zuu+8mm83y3HPP4Xa7yWaz3H///RSLRcLhMBsbG3zta1/j6tWrcqbA/fffz+Lioiw2hsNhZmZmyOfz3HfffZw9e5b+/n4URSGZTBIMBllZWZEZgdA+SqVSsk5hL1LD9TTprQ5U7Jtd78ieFWztNN2OdTNDZM9Itj6/9fHNjJdwCpqm3SBfkcvlgOYQH0A2X8H1DELDMKSIXzweZ2Njg/Hxcfr7++nq6sKyLFKpFIVCgTvvvJOZmRk6OzvZtWsXPp+Pp556imKxKDOUBx54gGQyyfT0tAwYxsbGpDifECAUmZzIQkRgKlhLAiq6WcZr37etn2+9P7Y+3o71nnEAdoOgqioo12vmw40OQD5WFFDeoRyKy13VnTSMGk59M/IyGkRirXR0d+P0NSdCZSpp0qkUdaNKrC1GPV/4fPvMAAAgAElEQVTclFVuSgMXy1WwVJ5/5SUa5RK//zu/y6VLl9h320G+/NWv0B0J8MgjH2Py4lXe/6Gf5vf+lz/i6voya4ks+/YOsaNvkKG+ARLLK6Q21vjGN/6GX/7FT/Plr/0Vmqpw6NAdPPboP/DJT36SldVlTp8e4+DBfZw+c5HDd97OuTNncTmcuOsGLZpKtKsNy+1CcTqb7eqqBhroLh1oMoEUFRoWKJaJkLLQNRWr0QAUGoCmqtStRrNuYjZHSVo3m1r/Ls8VbpHh3eKGsP/c1nMXjwUcYJ8bEIvFiMVieL1e+fVyuSybtMSgeQEjiL/zxhtv4PP5+JVf+RWWlpZYX1/nzJkzhMNhHnroITmc/OTJk5RKJUzTZP/+/bS1tRGPx3nzzTfxer3UajUOHjzISy+9hMfjYWRkhOXlZY4dO4bX62ViYoLBwUHm5ubo6ekhkUhQLpfl/ohOZ8HbFwwQ4ehuliVtZd6IZcfWt7JHtnvdDKfeWsexv96tr9X+uXjddgkIIdPscrkkxCMgIiHdLbICwbgR0Fe1WiUajTIwMIDf76dQKFAqlWhvbyeTyfChD32IbDbLwsKC7OHIZDL09vayd+9erl69ytraGr29vei6Tq1Wo729nUQiQTAYZHBwUM4tFtdspVKhXC5LZxWLxTBNs4kybDbvbZXoFsb+VtCZ2Fd75rBdsN57ygEA78gh0/ixDuBWz8E7HlVTHFimQqNh4fcFicVbCUVbMBoNatX6pu58hUC4nbpl4nRoJNfzmweiEAyH2NjY4NK5M3zjP3+dmemrpNLrfOu7f08iucJQ+17GL1+jo7uP/+H3f48rC7OM7tvDR97/IE5Ujt1xB+Pj47TFQvz8z32ScrnMSydOsGe4H7fbTUvAx4c+cpyTb7xKe2c3n3zkUzz9/LMcvecIQ30DVCo18sUy+XKJN2bnmVhJcKAnyh0jewl73Hi1Ku6gh0q50JSEsDRwKKibQhbN4G+TDmpZKJaJZTQwanXMWpVavUK5UqRarVKubq8WkDDWwphthTS28r9vhnHf6lxFYU1g7ULjX2jnCzkIv98vbxhN02SR3+VyUSgUGBsbY3h4mJWVFQqFAo899hjz8/McOHCA8fFxHnjgAb785S/L+cE/93M/x8LCAv39/SSTSXbt2sXo6CjFYpG33nqL/v5+enp6ZBPTysoK5XKZ973vfbz22mvs2bOHrq4uzp8/Ty6XwzAMFhYWWFtbI5PJsHv3bhRFkRTRSqVygxPYih2LfREZjt2RiH6Ef4l1M4N1M3z7Zl+/VSQrYCtxPuL8AOm8i8WiNPqCopnP57EsC6/XS1tbG/l8U4treHiYSCQCNLt4o9GoZPssLy9z+vRpZmZm8Pv9BAIBenp68Hg8XLlyhXK5TEtLC41Gg2QyKV/jwYMHKZVKUhAwFApJmq/ILPP5vJSktzskkd3YDbg9i7LDPmLJwNYGkf2rgoC2Rv/Nz29NIYSmVtB1G6VuiSrER0uhmCty6eJF7r3vftBUHE4XVq2GSrPBLBAOYZh1Gg2DUiaLy+WSmvGZfJ4LFy5w9PbbSS4u8vqrJ7gyOcXoyF6qpTJnJq5QdgZwhmJ4om7+rz/6S1Jj12hpaWFxeZmZ2Sk++KHjfONb/4W6ZVKt14iEQvT29jI3N8fc9BSRjijBSIhCKc8Pfvg0hUqV8StTjI+Pozo81E2TfKlIo1LG41BYTySplKrcPjiIxzBB0ymaFkGnZxMOs9HzlKaMBvb029yEQzZnGIiRigIz3a51M9xTfH6zc/1RDmDrEkyOa9eusX//fgkfiIhQ0AAVRaFYLKIoiowIRePO9PQ0sViMI0eOcPr0aa5evSopfTMzM7S2tjI1NcXOnTs5fvw4qqoSCoUoFArUajV6enpYXFwklUpx9epV3G43u3fvJpvNYhgG6+vrKEqTovrYY49Rq9VIJpNMTExIFc9isQg0b25BU9y3bx+KosiGILuhu5nhsBtXAXUJ418sFiVOvV1L/E17Qd7OUPpRMMWtoCL7cz6fj/7+fhYWFkgmk1LqQVEU0uk0fr9fOn9N00ilUnI0pyj0JxIJ4vE44XCYQqHA9PQ0Ho9HZoJzc3OcPHmS3t5e9u/fDzSVZHVdl/IPgm6q6zqdnZ0EAgF8Ph9zc3O0tLQwMDAAQCKRoL29nVKpRKlUwu/3yx6FcrksX5O4dgRkZJ/dIPZEBDZbeyXEfWMv+P/rYQHp71DdakazWq9uYjziIruZgbipoVA3h2koKo26QTFXprKxzuS5t2kL+Ln3gZ8kUyjjsgxqdQNXIMjSXIJ4ZwS9WEZVdUKxVryBELoK7kqBqYmL9Hf38NgTj7Njxw4uTVxh/NI52mMhOm/bi5GvsLo4xxc//0dUcwXYpJF1DvbQ0tLC177+nwm1tnN+cpZTp9/GQqWrv4+LYxP4g370okkmtYFlVHHp0N3dRS5fQFfdZDay6C4ntWIVr8dHwB9gvbDBuZUNqqZKazxKI7NKqCWCrtZp1Oq4PG7qDQul3sDlgKrqxDIbGNUqitVAKZdw1sqUK0WMaolauUKlUqNY2d5I0d4JLPBRu6zBP+dchVER8I+4iU+fPk0mk+GRRx6R0IngkFerVTwejzSCouAqIuRHH30Ul8vF9PQ0qqrK7l7BIjp48CCqqvKJT3yCsbExCS8JueDp6Wny+Txvv/22lKgOh8Osrq7KxqNCoSCpjQMDA2xsbEgxMQEruN1uqXY5MTGBYRgcPHhQdhULI2vvMrXr34gaiNAvEhLJpVKJYrG47Y59ayYiJDVulpn8qN8hlt2RCZbUqVOnaG1tpaurS0J2mqaRTCYpFAr4fD4ZuCiKIvsCwuEwhmGQSCTYt28fmUxGXgfr6+ty8E+5XOanfuqnpDMJBoNSUmN0dFQOJCqVSnJewdLSkuxByWazpNNppqamJPVXyIoYhiEjf4/HQ6lUktCUz+cjk8nI9yMMvoCH7PCO6Huxs6fsj//VZAD2CFEWwBp1yfO9GZ/8ZkYDwFLAqTuoVaroiorT62FtxeDXfv2zVDwautfJia9/i6uJac5evsSX/tP/ztBwHxMXx3F5fXR2xwlFIs0BFIrKmddP8vT3vsc999xDtWbw+BNP4HTpjI6OkkqlOLj3NiYnrtDa3cOjj/4jHt1JwOMlm05RqZVx+Hz07drF3z7xfVbWU5RqBvV6g7WxpixAvlDCWSrj0RTcThd3HzvKhQuXuG3PKKlSkeUzZ+nvaGd49y7Onj5DsVTCqUHOsFirVrk8P8/eznb8jiL5ao1gOEajXGzWABxuDMNE0zY1UoxmE1ytWqZWLlEq5Snmc6TzOVL5MuuF7W0EE+ciMG5x0YrZrjeD+Ozw0NavCflfRWkyvLxeL7/xG7+B0+nE6/Xyt3/7t1y5coXZ2Vm+9KUvEY/HmZ2dBaC1tfU6zPiJJ57g1KlTPPDAA/zgBz+QkMnIyAj5fJ4jR45w7do1du3axVe/+lX6+voIBAJMTk4Si8VwOp2sr69z8uRJSQ0UxWSv10uhUJBwRjgc5s477+Tq1avccccdJBIJTp8+zejoKD6fj7fffltG6U6nk3w+z+rqqpQjFtRCMcRESFcLI2yapuyEFswUIVAm/m/nsmccouPY3mvwzzVM4v4Xhvn5559naWmJSCTC0NAQe/bs4eGHH8br9TI7O8uTTz4pI2sxKEYU1Lu6unjjjTc4dOiQdIyCais6xru6uuRc6NXVVXldigK8mAmcTqdlo6GYWCakQ+r1OrOzs1IZdn5+nv3795NIJCiVSvT19cm+E1VtzpcQ2YhQLxV7JwIlERRsdbD2Xgu75Pe/Ogcg3iAgi2L27ki40eDfzAEUcnmcWjPN8voC3H7sblqirShmg0Yhz9zsJPPreRQzxAff/yHOjJ1lz+7dbJQqBCMtVGsVgl4fpY1V/s//9T/ws8cf5PXLlykUCnh8Xnbt2kVnRxfJ1XWee/0kyWSSjTdOMjO3wF133UlXJEKlVGZkZIS/f/RRbr/jCMVcge5YlFotAKbFyJ49ODUVyzQZ2NHPP/7jP7J31052Dwywp38HDpebr3/7W4ScDtbnF3ADt4+MNFPQRILkygKNRp2BzlZaNtIYhQK9/d0otTKqpqCrDhRNoSFmAJgmVrUKdYNGqUi1UKRcyJMr5NnI51krVlnLbz8EZIcGAGm8biYAeCv2j3gsbibR3Xrs2DGpFJnNZkkmk8zNzbG0tMQHP/hBHnvsMQYHB8lms7LxShiN73//+zz88MOcO3eO9vZ2ZmdnGRwcJBqNUi6XmZubY21tTTZ7LSws0N7eTq1Wo6uri2effbbZIb4Z9bW2tlIqldi5cycul4tUKkVrayvT09NSdvhjH/sYU1NTJBIJduzYwbVr1+jq6mL37t0S0kqn0yQSCVpaWvD7/RiGQXt7u1QiFQ1elmXJqFvIDlSrVQlx2B2AYNFs97L3Zdilu7fCUuJ8t7KFxPUgmD8Cturq6mJoaAhd19m5cyeBQIDf/u3fJplM8ku/9Es89NBDfOc735EFevEadF2XswQ2NjaAphro7Ows/f39mGZzoJCqqgSDQc6dO4ff78flcpFOp9nY2GBsbIxYLCb7R4rFIouLi0SjUTY2Nkin0+zatUvCcoZhsLGxwb59+0in07S1tVGpVBgfH5dn1NvbK1lEYtqdsHPCGdizYhHp30oHyO743+16TzgATVFRxD9ZGHwnUhR46I+sCWwaCbu0r9vhpCUcwRMOoXicWMk0P3z0KU7PzeDffSfeuMmBUIRDd93FhZdO4tEV8plmR2nRMjn/9ik+8uD91Io5LKNOOBTgwvlL/Jt/89/z1a99jU9+8pOspjMkEgmWFhb40he/wF/+9V9x4sQpjh3ey+FAkI995CG+8c1vN/FDGkS8bj796U9Tr1Tp6+0huZLg1TNv8YuPfIqgz0d7Wwdnzlzgz//iL9g9NEgwONCsJywuMrJrJ7OzsxQyaapVk4ZXYTVTJKYpRAOdJBJJ3N4CuseNojtwuP2EojFqlZq8uRyahmVUKZdylEplsvki2XKZTKlCYZu1gG5GA7WnsHDzLvCtPw9cF/G6XC5aW1sJBoO43W4ymQzf/OY3uXLlCuFwGI/HQ3d3Nw8//DATExOyMCpurKtXr3LbbbexvLxMOp2W06buvvtuLly4wIEDBzh37hznzp1D13VaW1vp6+vjjTfe4J577qGvr4/Dhw/zyiuv0N3dLdP0e++9l56eHlKpFNPT0/h8Po4fPy7lKF588UVef/11vF4vAwMDjI6OsrGxQU9PD+Pj43LKmWmarK+vN2dPbxqnYrEo2UZC2VJ8r8CSK5UKhUKBXC4no9dsNvsvAgGJZTf0gu5oN2T2AqY9ghX3qyjai8eWZcmZC4ODgxJqE7DM22+/TbFYpLW1lY2Njeu61y3L4uWXX2ZgYIBwOMzCwgI+n4+Ojg7a29tZX18nlUqRTCZlx3BLSwsbGxusra3R09PDXXfdxbVr11hbW5P9IaLIKxz1xYsXqVQqdHZ2ct9998mAYWNjQ9YDBCOtra2NZDLJ5cuX5XuyT3ITWYB4LO4D0ROyFUa9Ga323az3hAO4maEwTRMUFX3z5mqKRDk2L6pNh3GdI7BoWJst2IaJUa8TcHtpiUWxVAW/qvCfvvZXJFIZXjg3zv/263/A1UyBb//NXzMytA9fJITbMinl8ii6glEp09/dgfPAXnJra8wnEhw8fJRyrsTk9CyHjtxNMl1koKuH5a4l/vC3PkslX2RXRydep5PP/NtfwSxVOf/m2/zmr/07Uuk0rbGWZvqYz+F0eZiamqKzs4uffuhnqFWrtIRDKIpCuCXE//jbv0lfbweWaXL50hhd8RZS2QyNapEH7j7K8PAwLz7/Atdml9g3dA9zlRptGrisEp6GQSwWRTGrFDYS1KoGAb+fYj5H1TQpForkMmk2ijVS2TzJXIFkocRGdnuhgpsVewVlTjwnagN2o7K1g1hEl0Ih0uPxyNGOomt3dnaWl156iS9+8Yvk83kee+wxDhw4QDgclvK/okjs9/u55557ZCdvT08P58+fZ2JiQnLDBwYGiMVifPjDH2ZtbY1HH32UoaEhPvWpT3Ht2jXZN9Df3y/xeI/HI/XqDx8+TEtLi5QU93g8DA4O8pnPfIaOjg5Utakts76+LofM33///XR1dfHcc8+xsrLC8PAwtVpN9jII4ygwZlHoFpFqqVSSMtbZbPa6///SS7BTRN+BncoJ19dw4HrjpapNTR/7PAeRAa2uruLz+Xj88cepVquMjo5y9uxZ2dEtnIwQdevq6qJWq3H69GnC4TCmaXLw4EHOnj2Lw+FgfHyccDjM0tISIyMjMgDo6OggGAzy7LPPSpqpYJaJbuFkMollWQwODspO81dffRXTNFlZWSEUCvHhD38YXdclQ0jUYMTrff3119mxYwc9PT1UKpUbGtyEQ7Cz1rbu14+rr/xz1nvCAWw1/oqiXCf12mg0pO63KK5tTYkU1UJVNWqbhcxCNkdXvJ0aFn6HykuPPsZ6Icsrly6g4GakYFAIhOnfvZee1AoVDRqKStAfQHOorCWXuTw+xkA4SHcsjKHpfPXr3+Cu978fj8fLHXv2EwxHqJTT/Ppnf5P8yiqqQ+X4Rz7I6mKS1FICl6pz9PCdtHe1c/DwAWYn57nj8BFMVaVqmni8fjKFIla9RmtrG4V8loZRo72jg47uHk698QrTU1NEQmFm5mdYSqzg8ftoDftZmZvlgw88yOLMDG9euER7a4jOXcMkkyvEI0EKWTHTtkS13qCYTqMozeEV2WKJbCZFpmSSyhXJZHOUag3K1e3li9/sXO3RoV2nxy56Jn5WfBTpuOii7ejokDf+iRMnOHXqFGfPngWaTI5wOEw8HpdFNlE0FXzs+fl5NjY28Hq9HD9+nGeeeYYjR44AsGvXLsLhMNFoVA50qVarPPDAAywvL7OwsIDL5eL973+/1AZaXV2lXq8TjUZxu90SbhL4tMg+hoaGcLvdjI+Pc/LkSclNF0Vjt9vN5OQkH/3oR1laWuLatWvEYjF27tzJ+vr6DRLRpVJJGnehfisgHwH/CEmDf8llhyNEdC/uXTv0Y4d/BLwhIBAh4S1+bmhoiKtXr8pC+rFjxzh69Chf+cpX5Nl0dHTI2oNhGMTjcdbW1jh37hx9fX2MjIywsLDA008/jWU1J3vt3r2bZDLJ3XffLam/mqbRv0nrHR0dlXsaDAalnIRg8rS0tMhpYQJK0jSNkZERMpkM09PTUsKiVCpJGWuhKvvhD3+YhYUFXnvtNQ4fPnzdbGO7+J+dLipQEOFghQTKdkx6e884gK3Rothg++eiHiAuGDuv3IGOYZgomkqjkKczHKRYyRJwtlKt13nllVfoGhxi/tHvgVnnyfFTfPkv/5JHfunT3H70QZyWilqtg1Olkt/A3agQD3rJZvKUdI1IuJVPf/qXmVtN0tXeRXdnN75AAF9kJ8VshnLdooFOOV/j2LFjvHbyJA8++CBPfP8pWnu7eObZFzkwMsra2hp10ySby+HyemiJRYnHO2lra2NyZhqj0WB3rA2nprORLBIItFGo1PiZR36Zzs7OJj863dSbefvtt0hn8hz/yY9z4cxZxhYTjAwNoTQqVBWdVCoNqoJT91A0TZYTKxiNBprbRSKfJ49KvlEjV22QLlXZbjNxs3OFG2s+duNvL/qL7xX4rlDjtHdWPvroo7S2trK0tIRpmjz77LM88cQTHD9+nMOHD0vHIVLp9fV1HA6HxOxdLhdHjx5FVVWGhoYYHh6WxTin08nS0hK6ruP3+/nABz5AKpUiHo9z/vz5JiPs0iWGh4cJh8MsLy8D74wvjEQi+Hw+ySYRkhQzMzMMDg6iKAqf/OQnpQS0ojT57BcuXKC1tZX+/n5efvllMpkMPT09UndG0FAjkQiNRoPFxUW556lUSjqBQqFAPp//F20EE+d8M1hIRLRbo347pCuG1QgZaBH8zc3Nkcs1gxhd13nkkUc4e/Ysf/qnf8qf/Mmf0NnZidPplN/j9/tZWFigUqlw4MABZmZm+MpXvoLP55MEgAceeADLshjYFHgbHR1lZWUFVVVJJpMEAgFZ6/H5fBKSE30e9Xqd9fV1Kd8NsHPnTizLolgs0tfXx+uvv87Fixel4qxwGD6fD4fDwfPPP8+uXbs4cuQI586dIxqNYpqmHEMpmGGhUOg6baByuXxd1mzfz3d1dtvxS97tevGpJyxxEW1N/4VREBdMuVwmEAjcIJKEYVI3DUqVPI5imVgwSFWH9s4B3H4f//ZnP0Xb6F7+4hvfwmmAoWoE/B6ylRSVjRSpxSXqloFPc2BVS8xcu0pna5Sx8xfYu3cvubqBv6UFzeUhWy5TqzbT8PWlBTribTQMg6WlJSyjQaQ1xsrKihxEogCXL1/mfe97H9lsFt3hQnM6qDcMLFTiHe24XC6mpqepmw3aYq14PR5+8P1n+JmPP4zT62F1LUk8Hm82Obmbna2qU8Xv8eBQNbwuJ+upLKtLS7RHw2RTG82ZuJrG97/7XaLRKH/zf/8NpgmxWIjW1laMeomNfIFEtkS+YlC2FBqWuW355fPPP/8jz1U8FoVd0fRjj/4Ffi+Gr4fDYRSlqc3u9Xr51Kc+RTgc5sknn5TORGQMy8vLUgVS0PGmpqaAZnSn6zrr6+u0t7dLGqaYTbu0tERfXx+5XI6VlRUURSEWi3Hq1CkOHTokm37OnTvH4cOHJc7u9XolVtvR0YGmaUxOTsoI0u/38/zzz/OhD31IUgKFdpGQrBBwkoj2BW7t9/vJ5/Oyv+Cpp54iGAzy2GOPsbGxQTAYxOfzSb77+vo62WxWwDLbdq5f+MIXbmk07FCfeE+iP8Fe2BfXhVA/LZfLsp4h3r+qqhLnF0yy2dlZUqkUBw4ckB234hyFc7fXGzwej6TZCkcuhuQsLS1JRy0K6YFAQFJ3haEvFotSXkRo/gi1UDEUxjAM0uk0DoeD3t5eWcC3s92EPtHMzAwrKytkMhny+Tw+n49cLofL5aJWq+Hz+dA0jfb2dvbs2UNvb6+cLZHNZq/TQ/rDP/zDd3Wu7wkH8PIPnrJuZRzEhWKnD27tKFUUBazmwPS19RWWLo7TEW1hcHQX4e5BLE3nVz7+C8wbNVZrJZJTSxi6jtPR4OT3n2RgRy/n377Arr5BEsuzqApUy0V8gRC6oznurWA1cHo3o4JqData4syZM2QW5jl6192sradw+3woaETisSbUks2iKyqrKwkOHz7MemqjCSuEgni8fvr7+1ldS9LAYiOVoqW1ObjC7XBy8eJFDhw6gqppfPs7f8fefaPsGBjE4XCwkdygVmt2iIZCIaq1srxonLqD9Eaqyal2OSmWS6iA2WjgdTpQzAbf/fv/h+/+/XeoA9WGSaFaI5Uv0lCgYW6fHsSLL754w7lujRbtDS8iCrSfrYAPVldXmZ2dpauri66uLuLxOF6vl49//OOyuJdOp6Wz+dKXvsSnP/1p0uk0mqbJ8xBOxC4HIXj2tVqNVColR0t2d3dL3FfwwoVTUZRmU1J/fz/pdFrKFYgmICE7UCqViMfjcnRjPp+XA0ouXLhAd3e3dAKCVdNoNK7jviuKIqNdAaNpmnad1PTa2hqPP/443/ve9zZHmjax47W1NQG5bNu5fv7zn7e2npH4XDy2F3lFxH+zGbnlchmv10soFCKbzcrmOCG/PDc3J6nhV69e5dlnn+Uzn/mM5P0L6qh9DKPg4ItrScwQ7u5ujoONRCIUi0VM02RqakpKTnu9Xjo6OqR6aCwWk0FBIpGgq6tLSnxns1nZoR0KhXC73bJJLRAIyNGQiqJIZyBmVoisRkCEohlQDMIRUOXVq1dlNnH06FF6enquK/7DvxIHcOKZpyy7cVAU5YZOX/l1vWn8hacXVNGGYaFZJufPvEmbphEPR6jqJu0j+4lF21i8usCDH/8YjqCPgd4+Aq4I0ZYQX/qPXyS9ukZLKEy2UMTIrxMOBHjrrbfYMbIHU3di0TxkRWseUKNYoJ5L89orL7O0ME++WOLhT/x3DO/cxenzF6RUgGEYDPYPNC8Wl4u3zp6RNMOV5CpHjtzVlJaNRZmemyWyqTaYTqfJ53J09e4gV8ijahpXJq/hcbrYv28f5VyBKxMTrK6uolpw5NhdOF0uUJrdpCbNmyIQ8qNoKorDTb1aw6EquJxO4i0RVpaW+cIXvsBbZ8/Q3tfN0vIydQtKpcq2GYqXX375xnO1OfitXxcGsFarSVhIiG4tLi5KA9Lb20ssFiMajXL69Gl+/ud/nuHhYTY2NvB4PNx222382Z/9maTdra2tSU54JpORUJqiKHg8HhlZG4bB7OwsiUSCS5cu4Xa7icViHDp0CK/Xy5tvvimNSqPRIBaLcfXqVdra2lhfX5d9Avv27SMYDOJyueS8gnK5LNkdlmWRTqellozQm+/r60PXdS5fviydS2trq9wjESWKvRNYsYAXarUaFy9e5Ktf/aqsVSwuLor3vm3n+sUvfvEGo3GzwqSo84gMwF6TEdlaR0eHLFoLPLxWq/HCCy8wMDDAoUOHuHDhAvV6nXPnznHffffR3t5OuVyWjlkUj0VdQahyilqT3++XzWrOTQ2tRCJBJBKRhfZEIkEmkyGVSrFr1y48Ho+E1tra2giHw5L3b5rNyW1CwltkW6FQSDo68ffEOXk8HgKBAMlkUtYQhLMXDk68Xnsh2DAMJicnOXHiBL29vRw9elQiIZqm8aUvfeldnav2+c9//t38/Las+elrn98qG6AqNzKDFEWRGg/C44sU0+3yYFTLVItF/JbC5OVxugZ7cOoeVEUlEItx54GDFBPLTJw+xe7hYf78T/4Yxe1GMxroioJhGSzOTxMOhpodiB4P2VIJp9OJrml43B4so8HU5cu8+twzuDWNl0+8SiQW58KFS7x5+i1UVaOjNY4KXB4b458tzygAACAASURBVHd/53ewzOZYu9tuP0BXZwem2aBeq5NaXwfLxOvzszA/T90wGBsbI5fNsjA7xzPPPE+tXicQDDDY349D1fjW3/wXrkyM09vVhVmvEw4GKZeKYDaIxdsplaq4XV6cLg/1WhVdVbFMhfW1NVZWEoRDESzFQTDUwkc+/CFOvnGSVC5NoVJCUTV+7/d+/wvbdq7z85+3R/43o3xu1QMSzU5iib6B9fV16Qja2tpkJNXZ2ck999zDiRMnWF1dJRqN8o1vfEN29gptqWQyicfjob29XUIJPp9P6gaJKG9paYm1tTVJ45yZmWF5eZmlpSVaW1uJRqOkUin+/M//nIGBARwOhywc+3w+2ZQk4IZEIkEqleLy5cusra2xuLjISy+9hMvloq2tTUa8zz33HBcuXJDMF6/XK4uR0WhUUj23av0sLS2RTCZlRNjV1cVDDz3E9PQ0V65ckU1kn/vc57btXF9++eXPi8d2GujW/wKGEVm73RGIxwK60jRNGlVo3tdPPfUUr732GkeOHOHixYsMDw+zc+dO2ekt6kIOh0MObBc1IpGBOJ1O/H4/9Xr9uk7p4eFhCoWC7ORtaWlhZGSEoaEhpqenZWYSDoeZn59nbW1N1mBcLpd8D5lMRgrMeb1eVldXZdOXmPu8uroqO5HtWj6BQEBOrxNnKu4FUYMKBAK0tbUxPDwstYtGR0dl/8t99933rs71PZEBvPb807fMAMSSRkNVJK4mjIfP56NUKePTdK6NX2DpzDkGujsIdsYIelrB66PzzoMEqhYrp87y73/tV/n2ieeZS27g84SoKA38ToWpC2PEujsIubzMzc9QKFVwBUMEI01WiNFQWFhY4K1XXuaVJ5/ggffdx7H7H8RSFaLxVpLrKTbSKfKbs0v7+voolkr83d9/hyNHjnDy5Gu0trZy6M7DOJ0ukskksViMuqWyvrFBZ3cXw8PDPPHEEySWV3jkF3+Jf/iHf+D4T36Qa9euce89P0FmI8X3n32atdUke4Z30tXRyczMLKVKGa/bQ0dnN4FAiImJCUrlHPv376VWqzE5PcX+/QdJrKzicDdplL293cwszvHv/v2vsbqWRdFV6vXtixRfffVVCQHdiuFjh/i2Fo0F68GyLGZmZjhz5gyjo6MoikJHRweBQIBdu3ZRr9cZGxvjd37nd/jmN7+JoiiSVaFpGouLi4TDYYnbitkAqqoSiURwOp3MzMzw1ltvsbKyInHYgYEB9u3bRy6Xo1wus7q6SiAQkLTOt99+WxqFarXK0aNHJXZdqVRk+38sFqO7u5vXXnuNq1evcvfdd5NMJgmHw2SzWfx+P/F4nGeffRZFURgeHiaVSlGtVunp6ZENRgLuqFarhMNhyQIaGBhgbW1NQoI9PT1ks1k++9nPyl6GSmX7MrutNYBbFYHtZyo+t0f/oilKfF+tVpNwmcDkvV4vly9fxu12MzIyImsCghEoCqIiEEylUtdF1rFYDIfDIV/Tq6++SiqVkiNjg8GgzCjn5+elZHckEqG1tVXOfRbXoqhHra6uyulzwskIFtLKygqpVAqXy0U8Hqe7u5v5+XnC4bDUkxLdw6VSCU3T5Ecx81g4REGDFUSCyclJxsbGOH78OB6Ph8997nP/7UNAJ1/4obXVKOjqTaJ/QNHeIS6JG83pdOL1+Mlls7gVi3JqjVjIh0uDbNVAVdzgcJFbWWJ9cZ47j9xGNRTD4XRhqk3FPrNuNHm76TRep4PJa1epmSajt91BoVomEmkju7GOrlr81f/x51QLBW6//Xb2HrsXb0uYQqnAemKVPQNDbKwmSCYTXBkbB5pj/to7O/in11+jUCjw0Y8+RD6fx+1wMjMzR/fQkNQ47+sboFQqcfnyBKrTwY4dO/D7fczPz+N26szOzrKxluKnf+ZjzMzM4PP5+A9f/CP+8Hd/n29/89s8ePwDaJrG2OUrhFsizM3NceSuO8mXyjhdLsq1OuFIFN3pwBcIgVmjWivyx3/8Hzl56m2qje3Div/pn/7JEud0s2zOHv3bG8SE4RQ3naqqlEolrl69yuDgIIFAgEwmg8/nk7jsd77zHfbu3Utvby8tLS0yfRaOQKg3Ci69ZVl0dnbKTtp0Os358+d54YUXOHjwIAMDA1KPZ3JyEkVReOmll+jv75eDPpaXlxkYGMDlchGLxbAsi6WlJXp6emQxVjR0VatVurq6KJfLXLlyhVAoRCAQIBwOc+XKFZk1pFIpDh06xOTkJIlEQg42Hx4eJhgMMjk5SVtbG21tbdepfeq6Lg1dLBaTRcfPfe5zzMzMYBjGtjsAew3AXrzfusTz9uE0oiicTCbJZDKyhqIoCq2trezcuROA06dPc/HiRUZHR3E4HBIuUdXmPGh71iCgNtFprmkauVyOyKa0y4kTJ4jH47S1tUmRt3q9zsLCAtVqlfb2dqLRqFT0XFxcxO/3k06nsSyLeDwuaxV9fX3UajWWl5cplUrk83nq9TpDQ0M4HA4ikQgej0fOfjBNk2w2i6ZpRCIRCQECzM/Py78rdIFWV1elGqnYQ+HYRB/K4cOH+YM/+IP/9h3A6y8+c2MR2LxxGo6iKE1MW3mHGiqaJXSHC01R8bmcFNNrdMXjODWLtXwTK6ssJ4kFw2TKOQxdxekP4vL4MRoWNaOBz9P0tunUOlG/n+nJKTSHzvCeUbq7u5laXSO7usrUxBW64lE0rRmFRof3YKigOzXWEwmKa+tcOX+Bo3feSWJ5hWefeRqj0eCOO+/g7IXzHD58mLGx5ji6gwcP0hbvwOn3N5tSsjlKlSa7pFxpDmo/d/4M6+vrFPN5sukN3nzzTe64/TANy2Tfvn3NwST+IL/9m7/F0088xZUrV5icnmrK0bpdZDIZDh2+g0hLjNaOdiZnZgmFW5hfWWLX0DBOp45p1RgfH+N/+qP/mZX/l7s3j47rPM88f/fWvu+FAgqFhVhIgJu4iJS1UJJF20k7tlu2x85k7ZOMo+4cJ53uOZnudJIepdPJxDM5mTjxMmk7sU8mtmM7irbIlmyJ2rmJpESCWAgQO1BYCrXv273zR+H7WIQoT9KmZxTfc+oALKDAqvvd+37v+7zP+zyJrdsWKE6fPn3TuorjB20Ggvkjbk6BuQqcXozpC32bjY0NPB6PbLB5vd6bpAXsdruEj7xer4RZDh8+LAOurutS179QKDA6OsrQ0JC8tjY2Nsjn80xNTREKhTAYDLz44otsbm5y3333MTMzw8GDB7l+/TrxeJyjR49isVhwuVzs2bOntXlbrXIoTNd1rl+/ztzcnGSkTE5O0t3dTalU4sEHH5RMmD/6oz/iC1/4AjMzMywvL0vaZLlcZnh4GI/HI8kRgh/v8/mw2+0yY3z00UdZX1+/7U3gd5J5aF9n0QPYCQ0JX2dFUaQ4WnssEsw/QRIQOj4iCIrrQrB0BNymKAoejwdVVbHb7VQqFaampqRVqGBiCVgqFouRTCZlczcSibTYfVtbUuMoFovJRnuhUMDr9ZLL5bDZbNKyUvSThN6PYBKJHoeAGrPZLNPT0+zZs0cmNj09PSiKwtramrzmxdyK2DxqtRput1vOdUxOTlKtVvnOd77zz38DOPfiC/pOjNhgeLtWTCs43GgmKYpyAzdTW7K/FpOZvu4o5XwOr8eFpiqUC1m2xiZQnXYMXj9GLBj0OrreskwsVapAa/x+Y3UFj99HMNRBuCtKudFSa1xdXcWqGVG1JhcvnOfeE3eTy+VweTtY3VglEgqysjBHLrnFY0/9A/lcln/3b3+jxfa4OkZia4u77rmbVCrFSy+9zL333tu6OPJFPIEgoBLp6qSuKbj9AeLraxiNKlaLhVdffgW33YbDZuXVV07RGYkSj69z9NidXB67ytFDR4l2dnH+9Gs0m01OnTqF2+PE43LT3d3N3NIyA0ND2Ox2xq9Nc+T4XTjdLtJbSUwmA/1D/Zy78AYvvvoaL7/y2m0LFGfPntXb+zpwczXQvq7tcx87D8F6iEajNBoNSRetVqusr69TqVTw+XxSVkBkkoJd0Ww2pUZMpVIhGo0CLRu/jY0NSdebnJxkZGTkJnw3EAiwsrJCtVrliSeeYGBggOHhYer1OrlcjlKpRN/2ENHm5iZDQ0OSPSI+u8ViwePx4HQ6KRaLGI1Grly5IpVDk8mkFHNTVZVoNIqitGinAwMD/OVf/qVUuGw0GkSjUTo7O0kkEgwNDaHrOtlsVtIPy+UyNpuNjo4Ozp07x+rqKl/84hdv6wawM27slChoH/Zqh4HamU6igdvO7FNVFavVyt69exkbG5MQmZDFEOsu4CLBhJqdnUUodUKL5it6Be0VpcPhAJAY/ebmplSIHRsbI5FIMDg4SK1WY3p6WlJNRdVoNBqxWq3ouk4ikZC9F0G5rVarjI6O4vf7qVarhMNhnE6nHDxsNptsbW3x5ptvyh7W3r175RDc+vq6hA1XV1clkUAEfuFXsLCwQDqd5rd+67f++W8A51869Ta+uLKjCXwjONwsiCWm4sSF5XK5qRbzuJx2bCYjerXCc0/9PfccO4Ti8VBtKNgbZjY2V9B1BZ83QCKVQlNaSo7FdJZgTw+9Q0OUdZ18pYSqqiRmZzj1wivMzMwS8Hv59L/5FQxGFatiQjUonD9/Fo/DTj6dYn51nWeffZY7DhzA6fay78B+5hcW5AW4nkigGgzbWbqNod3DhEMREukMwUiEmbnFloBYyIvP7SOfyrCxvEoivsT3v/cdrFY70zOz1Bp1PvihD/NTP/Vh4stxjh45yPj4VaxmC5/7sz9lY22dXbv6uOPwoRYsNHWN+YUFHnrf+9ncSmJAweF2sbQeJ9jZwVf+779heSX+I9kAdmb5O58X6ycw9XY+v2j4itJeNG9nZmYAJM5rMplYWVmh0Wjgcrkk4+Py5ctYLBZsNhsnTpygXC5LP9nl5WUAFhcX8Xq9xGIxibMHg0GmpqY4c+YMgJwPiEQiPPDAAxSLRXp6ekilUhJGGh4e5sKFCzJrBCQe7PV68Xq9jIyMYDab+c53vkMgEOCpp56SqqAADz74IAcOHKBcLnPPPfegaRqvvPIKXq+Xy5cvc/XqVdxuN+FwGGjp0e/ZswebzSbF45aXl9na7kW9/vrrXLhw4f8zFtDOTbx9M2iHioQjmpD1EF4MHR0dPPXUUwwMDNyknCmyfpvNhtlsJpVKSYkGQcEVKrEul4u9e/cSDAbZ3Nzk/PnzrK+vo2mahHjEhLT426Ojo1SrVaamptA0jQcffJB6vU46nZbaQYLx43A4pO2kuNYqlQq5XI5UKkWxWKSvr49EIkE6neb48eOyYhHZ/NTUFLlcjoWFBSk/IhRsa7UaAwMD+HwtGFewwTY2NiiVSlitVrxeL5/61Kd+PDaAnRkivF32WQQKcTEJ3NNqtVKrVrGYrdjsVjbjq5gUjUhHmKuvnOLg7iE0pUlDNdBsGilW66iKRqFQxKCbyJYKJLMZqtUyLqubfceOoVrtFCpl1lZbnfcvfvGLzCwvU6dlRvORkw/xCz/zs+zeFSMcDvH973+fD7zvIV556WXSqdaNd+HcBUwWC8fueg8r62uYDUY6OjpwejwktrZI57LMzS1w4I79NLQmGkacLg/Do/toNnRm15eYuXadwb4BNhYWmZ26ytTVN7nzrnuoNxr4gyFW4htMX7vOJz7+cb78lS/zG7/x66yvrHLi3nv588/+n8RXlnG6WkNQnV1R3G4vyUwaj8eHajCRLRaI9vextL7OS6+9yuLi8m0LFOfOnXtbc/9W2b9Yc5E5ihK4XS/fZrORSCSksNrMzAx2u11WA7quyxtaZP6lUkny9u12OyMjIzidTnK5HEajke9///u88MILPPnkkzL77uzs5LOf/axU6XzmmWcIh8MsLy9TLpeZm5uTpt+iKSk8AmKxGIlEgkqlIgXMBCRgtVrp7+9HUVpEAjFotrCwwJUrV5ienub48eOS9ZTJZFhcXOTkyZM8+eSTfOxjH+PixYv8wi/8Al/96ldZXl7G4/HIieHl5WVKpRKBQED2KLq7u0kmkzz33HPMzs7e1h7AreCeWx3tcwEigAs2TrsKppB0EE5dwlJRUCLFwJVQ/xTsn3K53LJG3ZZxHh4e5vDhw5hMJi5fvszExAROp5OTJ09SKBR4/vnnJQ1U+PiWSiVCoZCsHoS5y8zMjJSYLpVKErIKBAJkMhl0Xae7u1s2hYV+UG9vr5SFGBgYIBKJMD4+jsViYXl5WdJUY7EYe/fuZX5+nitXrkjp8DvvvJP5+XlqtZqcIBcVpfC3EEOhn/70p//5bwBvvPzi23sAinbLbFHXbjzXLjhlpMXoMCgKRqVJpZDD7bLxV7/3uxw9eAh/R4hGtoQzECDvt+Mx2bFbHSS3UswvLlHRW45C6GZ2HzjI2kaSpx57gq9+6Us0mzXWUPjtz/wx5996i2eefApTqYhKgzdfeJ74+ho+nw9VVclnc0yPvSGHjy5fHqPSqHP42HGGdg3w4osvcujoUVSDgZm5WQKhMJfeuoDb7WZgaA9eXwi314fVametmOHAvkMoDY3MeoKvf+UvcFhUCuUaia0tTjzwIM+/+AqxaA9jY+OEox1EQkFyqSSpZJIv/Nmf8ti3/47vPf8kXk/LwaheqRMOd5DNZlFMVnSTiUsT44xdu8ZaYgv9NhoDnz9/XjYL3+nRHvzbN3kBC5lMJonpisam1Wrl29/+tmTXZDIZXC6XNGxRlJYBuwga4u8fOHCAfD7P5OQkf/7nf87U1BTZbJZIJMKJEyd47rnnpIzzl770JckG0TSNa9euSc0ev9/P008/jdPppKenh2g0ypkzZxgdHcVsNrO+vi69BwSfXzBSxGeMxWKywfzNb34Tm83G+vo6vb29JBIJxsbGOHHiBCaTiXw+TygUkto4J0+e5MyZM6yuruL1euno6KC0TVcWuviaptHT08PnPvc5VldXb+scwO///u/fFDTaM/uda9nOCBJzHO3eAYbtSrhcLkspjpmZGem9C0iLRavVKge2hOGNyWSSGfiJEycwGAycPn2aqakpvvGNb/C+972PQCBAs9nk6NGjuFwuvvGNb8hmPrQqkOvXrxONRtm1a5fE+n0+n5zO9Xg82Gw2qV8kNKCuXbtGJpORVWilUmF8fFzaPy4tLXHkyBHe//73Mzk5SW9vryQpiKTXYmn16ubn50mlUlQqFQYHB+V8SLsBTiaTYXh4mP7+fiYmJn48IKALr556Ow1UaQV3cSGJhm87VKDrNzIPk8GIy+EAvYLNHSCX3OJf3rmPX/zgTxDx2HE5vPg8DroOjuJ2d1HWNVLZFONXrhAOhtlM5cmVytgNJoqqzhf/ry9zZSNFzWxCrzV5+pnn+Bcf/CQPPHiST/3cz/E333+Osck3SFw+z+SlS5x67lk+8uGHSabTvHH+DHaLmaf+/jFO3Hcv1XqFO48flz6j5XIZj8/P2NgYo/v3MTe/xMjICLNzC5x65VV8gSD7Dx7g7rvu49r1GaJ9PdicNl5/6RXiS4tsxuNsbiUZm5rCYbNjMZqol0tY1Jbfb9DtRms2CAR89Pf3t4bJNJ2AP4SvI8Tg/v2sxtcpaQpTU+O8dflCCxZp6GRLtdsWKN54440fWAGIG6CdCXSrXoHYXFVVpVar8bM/+7OMjIwwODgo7R1dLpfMiJeWlpicnJTS0MKftbu7myeeeIInnniCdDoNwN13383Ro0d56qmneOihh5iZmeHixYsMDQ3x6U9/mlAoxMDAAOfPnyeXa2kwhcNhHA4Hfr+f69evS2jKarVy6VJr2C8Wi8lsNp1O02w2iUQi7N+/H4BcLkcwGJSbxOzsrPQkjsfjsidgtVo5dOgQExMTNBoNqYEjmELFYpFIJILH46G7u1tCW93d3fzxH/+xbIanUqkfKQQEN3vbwtvli8Vat1f5QlPf7XbzwAMP8MQTT8jeTE9PjxymEpm/kPYQkIvX6+XgwYP09vZy+vRprl69SqFQ4NSpU/zBH/wBjz/+OM8++yyNRoM777yTj3/84xw7doxnnnlGOn0ZDAYcDgeJRILZ2VkqlQr9/f2So18sFqWngt/vJx6Pk0wmGR0d5fjx4xLjT6VSJBIJOXgmKtlkMsmpU6d46KGHiEajkoK6tbXFuXPnCIVCBINBoNXv2tzclGygYrF40zk9ePAgTqeTsbExAB599NF//hvAxVdfvqUUhGgKi8m6nRAQbdPCBoMBn80O5hqWqpEqNb7+2/+BzaVV3nP/CcpbS9h9LnLZKrv2H0DTKoxNTJApVQkEQnR0dLC2toZBtfO5v/0aq5tZtppQsVmg3OSj/+rnmX9lgqDXx1+depL/8hff4u/+2xcIsE4lscU3/+qvmZ+fRzcaaNQruN1u9gwNsrEeJx5fZWZ2mmZT54033uDn/9UvYrPaWVxc5OzZswyPjG4LghmwOR0c2NY5KZYbxDfWsbucVGpljh45glatcf7115iemeXeBx7g0d/7feJrcXw2Jza1yoGRvWxtbGI1G+mKdGKxWNjMpOiPxujp3UW4r5eFZAKLaqarr5f/9Fv/Cy53q6wsVxqsZYo/sg3gVjBfu03kzgAiXicmXQX3+z//5/9MOp3myJEjNxmEd3a2Pu/ExATJZBKv10t/fz/xeByHw8G3vvUtLl++TKVSkRnpF77wBX73d3+XkZER/uRP/oTV1VV++7d/m66uLkZGRjh58qQczReByuPxkMlkmJycBFpyC6urq9x7773YbDa++93vUqvV2LNnj9TDcTqdjIyMSAgklUrhcrmo1Wry+RdeeIHJyUmOHTvG5z//edbX12Ug6e7uJp/Py43OZrNRq9Xo6moJCQ4ODspJ1n379vGbv/mbUpGyXC7f1g1AsIDE0Z75C54/3DB7gRs0XzHM1n4deL1eKpUK8XhcKr2KTVWwZ/x+v4T5isWi9HcWvs8XL17EYDDgdDrZ2tri0KFDkmIajUZJp9O43W4URcFut/PWW28xMDAgE0vxu+FwmJ6eHtxuN9lslqtXrwJIynA8HpcJQD6fl9VKKNSKIcJ9TMA3mqaRTCa5//77mZyclHLQ3d3d2Gw26UEselgiHq+vr8ukIhQKkc1m2b17N0ajkZmZGakE+od/+Ic/1Lq+K9RA1XZcePuhc2PcXdd12QwUJWSraaTduOBMBmhoKE4VfSNNxVQjWG9y34FdnH39DONKlUg0SrmQozvs5sLULEsbKVJ1HetGlrtMFirFMk88+zjlYoGHP/iTXLp6ncV6A5/dy9Nf/Tu6B3uI1s10m81cfP27/G9//F/59M/8BA8cOka93uDkQw/xxS/9N37m536Wxx57jHq9TjgcxGi14vMF8Li9WGx2nn/hFHang1Cwg5Pv/wAWhxOb2cRLL73EanyZbHIDo9FILl+h2qjj3oZAnpmbo1mr89gTj9MR6WJmfp7VtTheqwNNaxDwOMhnk0Q7Q9vMljpOm49GqYInGKZuszF9fQGbw86F65dZ/Ye/Z6C3m3q1ggWFonp7DWHag347RiyyLnGjtweMdrooINdcURQpF2AymTh06BAXL16UmjA+nw+DwSCneQuFAslkUg7xfOc738FqtfLJT36Sp556ikwmQ0dHB7/zO78jS/Lx8XE2Nja4//77+frXv87MzAy//Mu/TDKZlGJlhUKBarWK3++np6eHpaUldu3ahc/n4+rVq1ItVGjMl0olNjY2mJ6eZm5uTlYGgqGiaRovvvgic3NzPPfccwwODvLlL3+ZWq3G0NCQ3KwERVFAn06nE0VRpD/x0tISZrOZ/v5+PvvZzzI0NES1WpXn9XYe7Wsk7j+x1oK6CTfMXnYq+4ogJ9hAQuguFAqxsbFBLBYjFouxubnZGqbcxr+FlINwPpudnZVU3YGBATY3NyU9UwjMCdOdD3/4w3zpS1+SFdR9990nq0RR1TmdTiqVCjMzM1KuYffu3VJSQ7B6RLNd9IkWFhYk7bajo4PR0dGbjOo3NzfJZrMMDw/zwQ9+ULrCiQFCIREhJCZcLpdULLXZbKRSKbq7uwHkdLeYC/hhj3fFBiCC/c7yEJCdc+AmWdv2LNFkMqFrKrpJJZfK4NXBrBsxm62k9RJ39DtJX2nw1xPP8p5IjM/ObdAZdpOv6Ewsxamb1zl+/G6G9u1i5No1fvHOu7k6t0DA4+by+CSmXgvmQIBIOMA/XDqH0W7H79P519/7NtTqvHj6dSKBEB/6iQ9w7913cW1yilDQ39IQ8rlxOGzMzrQoZQtzs4zu3weqSmJjg+7urhZt0+3G7bJzNZkksbmOy+WgnCkRDIfo7gjSqDd5+eWXW6XqVppCuUa+WMRsUKlUilhUhXKhSrQjzODuYQLBIJubWxRyRfr272PfgTsoNjUcfi+zszM4FThyYJTN9Q1K+QJhr5fNVPq2rmv7Ot6A7XQZ+BVFkRouAt4RQlmi8hN6MkJSN5lMygpwaGiIV199lUqlQjabZf/+/WxublIsFmXjUJToYpJXMHcqlYqEcIQhzGc+8xkpPib09L/yla/Q19dHV1dXq8eTz0uHqGAwKNk/gJxWTSQSLCwsSLhA0zTZVNzY2JD9jX379knBOBFEL126JM9RKpXCbDbj8/mwWq34/X4OHjwoJRCq1SpdXV0AUoTsmWeekb4EAOl0+rb7AbTj+u0y3mKITzwvNnrxc3GIDUloPgkYSGT1iUSCYrEoezYimIuGb2dnJ8lkElVVGRgY4OWXX+bcuXOYTCaOHz8ucXyjsWULe+LECa5du8YnP/lJzp8/T7FYxO/3SxXWYDAo6aXCZN7n80kdf7HmgBz6EhPmwWAQq9UqNZfGx8ep1+v09fURDAZZWFjAZrORTqfJ5XIt/a7ta11RFOngJibIhQSI0HLSNE0G//Pnz0tWlJh8/mGPd8UGgKqiKwqqwYCm6+iahrGNIiionmKSUAQGo/GGprjJaKPa1HDZnJgMKtZmeLmc/gAAIABJREFUg6KiYm16yZtBMW9SSjQ5lV5gX3cX1/JbWA02ohE/PXuGePDEvTz/9HfweT1EuyKc/PjHyKlmHnrfhwkHvSwvz2A1W1AqOm6MJIp5rDUjmtVCrVJlbmWF5158gXvvOMRGYpNYLMb+faM8/fSTdETCPHDiPpLJJHv2DLO4GicSi+K02zjz+mn6erulocm+vSMUi3m6u7vIZ7NcGbvE7OxM6yZp1tH0JqHOLlbX4q2Ns6lhAexmAzaLic7OTjSlpfJ573vfS7FQIlHIUtE0VKORSrVKIrHBnr4YhXIONRggobf0Wjxu521d1nZ4rl0HRjwnFDjFc4IlIqAEofdUrVZlY1NcA2L4xuv18uqrr8rfEc1QAdWEQiHJmBH4r8Vi4Td/8zdJp9OSZZLP5yW/XNj1NRoNzpw5w8mTJ5mZmUHTNAKBANVqlZmZGVwuF7FYTE6JiuagpmmtAT23m5mZGWw2m5wi3b17NysrK7KfIKpb0ccQg2niHIkbfmhoSPLVR0ZG2NjYoNlsSl0kTdMYHx9ncHCQjo4O8vk8mUxGwiu3+2jX+mlfbwH7CKhHwLbi90UmLz6fmPFwOp10d3dLMbZ8Ps/58+elTlAikZCS3a+99hpms5mRkREuXbqE1+slFApRLBaZnZ2V8s6apkmtpEajwbVr12RMEcqzuVyOAwcOMDU1ha7r7Nu3D11v6ftPT09jNpslA81sNstBw2q1SiaTYXV1Va65y+WSDediscj4+Dgmk0nKgovrWbwHYeIj2GyiGlIURcqVC97/ysoKLpdLnkNxbn/Y412xAeiqAopCQxeloopBUW/CAq1Wq+TiigxJlISqqmJUTWA0US+V2SpU0Da3+Ku/e4x/cfRBnnzjPJNKgY8fPsj3L11mjSq/+MH3UU3ncAf9+GJRmoUkYZeZ/g++j9H9d1C2q4SCYX75Qw/zf3z9r+jq6GWlnEM3qTSaBqjZqJiAShmDxcqZty4yduUSjUyWkZHdNGqtQBvp7MDrcjI/O0MymSabz6NYTVz57mXC4Qh9Xd00tSrDg7ta1MD+fjm44o8EyZRyGIxGrHYbz7/yUiv4NR00AKvZiqFZx6w2UbQGhw/eyeHDh+kaHKJ3YJBkOk0iX6In0o3icTK/Guf8d5+n1+9mMbGMx+7E73bhtjkolIqk8rfXOvBWrBBRFbTb3rVDAu1KiGJtFUWRvO1cLsc3v/lN7rvvPp599lmazSb79+/nypUrVCoVDh06JEvp3bt3S7bGwYMH8fl8BAIBHA4HP//zP88jjzxCT0+PnCxtt98TN9iVK1f4zGc+I2EJr9dLrVajt7eXra0trly5QrlclnLRc3NzQEs9ttFocOTIEWZnZ2XTWATtSqUl520ymbh48SLJZFJSC9txc03T2LNnD6Ojo9JrVkBMgpJYLpd5+eWX5cYpApWoZATf/nYdgg7ZPugl3quAq9phIDGEJaCLdter1uxOS4M/lUrh9XrlMJSAZKDFBFpaWqJaraLrOqOjo6ysrMimt1BSvXjxIqurq1IuY2trS55LETgFLj8wMECj0eDZZ5+9SbJZ6DgJmQ8Bc2maJtllAwMDsskvGEr1el1Sfvv6+ujp6WF1dVWayIj3oeu6hAZFpZdMJgkGgzLIu91uIpEI1WpVsr/aJbVFL/SHPd4VG0BdsUrxN23bHL6pNzCqKqoR6rqOqhgwWC2UGi1mhLZ9A9TRUEwG8vUcpoIRFQN6vcn6RoJQ7whfPHMKhwL//uMfYSDcg65bCHR2cdeRu6hXsjg8XnydwxRLBXYdO87k2FuMTy8xePAwutHOb/3pH9JzcDe/+h/+I/X0BsPDw8xcm8Gq6+j1BlWDmeMHD/JLH/8YLz33DAGnmQMH7mAlvkql3mDfkaOsx9cIOL1YPEHCjQaKAe48dhebG2s0KmUqNQPDe/ZgspkplUpEO7pw2lyoBgv2YStLC/Oce+lljIqRYqFGrtnABDj0Omatid/lYNeuXeRqTZYSGXqOdFAxuUnVMxR0nXhijWDejpJO8oG7j2KzmtEqwxTLLWepUqWE2WbE4bT+SNa3HQpqDxg75R9EoBCToULSV2SQYsjG6/Xy0ksvYTab+ehHP8rc3Bx+v59MJsOxY8dwOp14vV66urokS0boyNjtdur1Oh/60IeYnp7mc5/7HKVSid7eXubn5+X7FNO7w8PDUjDO5XKhqip9fX2yD1Cv18lms/h8PpaXl+UAWzwex26302g0GBoaorOzU1YcQmlydXVV8ssTiYSUjBYaSEajkXA4TCAQIJlMcvz4cdxuN4lEQr6XQqHA5uYmd999N5rWkgMX/HYRjG53BXCrvk47319U7e12jWKzF68TG6ymadIUpVAoSP2c8fFxKX/dbDZxOBx4vV78fj8mk4l0Oi2NWqLRKCZTS9Nrz549fO973+OBBx64yWBGXGf5fJ5KpcLZs2fl4J+gkhoMBqkSazAYpEYTtNg5Pp8Pv9+Py+Xi8uXLUnxPJAyKopBKpaSkSCgUIhaLyRkBcS5KpRKJREL2dIrFIsPDw3R2dkrht62tLTY2NshkMvJvt2sq7ay+/nuPd8UGoKG0ICBVxaC0qgFVNUloyKgq1JpNwIjBrFBtNFHV1k5q0BXQwWQwg2qgUKuj1+rYXU52Dw3zu//1UVKba1jsZvpHRtj7Ux+gZjDjdhgxW4yUMmncAS+Rnh5yhRKu7g6K8QSrE2NEqhWI9fCTP/0xXrvjML/wqV+hkEzjD3hwBn3oqkJ8bIJfevh/YGFsgn/zS4+wuL5MV28MbyiAzx+koTXxeUMYzSYKlQV8Pj/BUIhr05OYbW58/hAhv594fIVoNIbBYCCbLpBK5ygWcnR2dOB1uxgeHmbs6hRzSytky2XK6Qw+u5N6pcLxB+/noz/zP2J0urE7nExMTHP26gSP/8Pfc31uBp/Fxh1Du/npj36YYNBPvV5FsTtRii3s1Vy0YLXYqNdubxP4Voyedp6/gAraqb7QCiICJhA4ssj0Go0GR48e5b3vfa+c+uzp6ZHBs9FoSE0cr9dLd3c3tVqNXC5HpVLhypUrWK1W9u/fz6//+q/ziU98gkceeYSlpSVp4ShK/k996lO4XC7C4TC5XI5jx47J9y4ofkK1stFocMcdd7CwsABAX18fLpdL4tlCG2hzc5NyuczIyAi7d++mWCwyOTlJs9mUGLeYdH3wwQf5xCc+Ifn9q6urnD59mu9+97tSAmNgYICHH35YTkdbLBZpkCJ6H6KyuV1HeyO3fa3bN3e4gfG3O3S1XwviOU3TKBaL7eY19PX1oaqq1NwXA3y6rjMwMCDdtERiEA6HGR0dpVgs0tXVxQsvvMCZM2e46667MJvN0iTHarWyvLxMsVgkFApRr9eJRCIUi0VqtRp9fX2yChWm8gKWE9+LIS7h4Cbwe0Dq/ft8PilM1+5oNz09zfLyMjabDZvNRl9fHx0dHfh8Pvn/iPkGUemJZr6onkSl9eMDASkqKAq6osoKQGwEKAq1poZBbWG/jWYTVTWCoqAooGnbKnn1BhoqGE14QgFWVuNY7Q5Wry+ysrrIR37l50hubBHu60G32FgeH2/t6C4/f/K/f4Z//+j/SqpZxKIrJDbWufvue3jhpVeIlMp09vThC9j5yQfuIZlI0RXqZHNjg/379zM1MMRdd97B3fccx2QyMbe6zvTUGB3hCErTzcrSMm6Pj0QmSUe4k62tLZJqkmisl6WFOcxNM/F4nHK5SjTWxcrKSmsitTtKuVmm1mhgtTtYWFhiYWGBjc0EpVSeSGcQq83EQz/xPo7cdx91DFQ1hfXldZxuL9/7y69QKZZwetw0M0XcLhcb8TWcTjsOt4tyqYTZboNKBbNmR1WN1I23N1NszxB3bgTATVS/W7m8iUAjdGMCgYDM+kSwvPvuu1lYWCAcDkvMvV6vMzMzQ7PZJBqN0t/fj9PpJJvNYjKZeO2111hbWyMSibB7926+9a1v8fjjj/PKK69IVk1XVxfDw8PEYjGq1SrpdJrx8XE5/CUgI4H9LiwsYDAYpFql8OMVgnRCujkSiUgoJJPJsLS0JLNPoRRpNBr5tV/7NSknISZjK5UKjz/+uJSnFq9bX1/H4/EQCATk3xHCaaJhfDuP9mDfvhGIzbFd26cd0tpJ7mi/DlKplKxW3G63bK4qiiIb2V1dXZw8eZLHH39cSmuIa0NVVeLxuNRPslgsnDlzhmeeeYZgMCitREVD9wMf+AAmk4nV1VWCwSD3338/2WyWsbExSUwQ0GMkEpENZWFdKqocRVEkQ0wkIbFYjHg8zvj4OMFgkM7OToxGI2+99RbFYpF7770Xn88HtDbJffv2SXP6TCYjHebEIGKxWJTNaUH/vJX43n/P8a6YA3jljSu6zAq3NYCMioq6zXJSFAW01kWloaPSxi4R2YSu01QUGoqOQ2/i0xWe+9rXCYT87BoewqyqGHrCVKt1LC4XXTYHGysr/Mdf/df89Mc/yuhdh6ihQUnH43WST6dJrMSZXVjkyNFjXJyd5Z6H3k+1ATaHg0a5pdq5PLtIR1cH1VqJC+fOYjca+e73nmQrncEf6ODw0TtRVZX+3m5qWmvH1lQFs9VELpPFZDDQ2dHB7OwsVosJh8NBsVShXK3idrd44lubCWl6/vjjj1Nb36J/ZJhP/OLP0TMyQr7cxO3yY/X4OHv2LN/4+t+wvLxIoZCjs6sDr8nKe+++C7fViifoIxztxOPxoNVb2UmzVkVvNCkXS/zM//yfbhtf/M0335TrKrKV9mEvEUB2Qgo7v8KN7Kder/Pss8/i8Xik6mV3dzcWi0VmXvl8ns9//vNSmuHhhx+Wf6PZbLGp/H4/e/bsYX19nZGREex2O0J5UgzhCE2giYkJ7HY7X/va15ibmyMcDnPo0CH27dsng48Y74cb8gXtDUGLxSIzO2HULmwDa7Ua3/jGN0gmkxw+fJhHHnlEzjaIDenMmTM8+eSTTExMyCAUi8W46667pIyB3++/CZIQw2TlcvmH1oxpP37v937vbWJw7ev0Tw1MohFeKBRwu90y419dXcVoNBKJREilUpTLZU6dOsUjjzzC+9//fp5//nny+TypVIpCoUAgEJC6+ULAbXFxkfn5eXK5nNTvEVBgs9mULCu3283Q0BBGo5ELFy7IrFvMDogArOu6nAlpN3AplUryOshms/Jn9Xodh8PB+HbCKSoMkThEo1GKxSLJZFJupvl8no2NDer1OqFQCK/XK699YbAjfvfHwhFsbm3rUVQDqmJAUQ2gGkBVEDuAohrQFRXFYEQHdOUGZCRgIl01oKBiQMViMKA3aljMJjbzGYLRTrRSBYPTQcjuRS/VmYkv4w25+cgnPoGmWlm9OkVqZgarz49mMWGyWHnr7DmuvHWWej2P0x/GZ3bgVIyY9ZbMQyAQ4PyVyzgddq6++SYnTz7AWmKd3SN7+Ydnv8fLFy9x6uw5FpeXGOrtYXpyDK1RJbmVYHFhjmajRrNeo6k1cDodJLc2KRTyKEYDxUoZg9mKyWLFaLHg8fpxe30MDOwiGAkxtHcv2UKBgd2jOD1+Kk2dp594gtNnTzO7uoDBaiRfyNOs1oh0BNm/ew9Hjx4h3BHG4rCj6AoGoxGDydBSXjUawaAweuSu2+Yctb6+/mh787cd/oEbw0E7+cztVUI7XCD+htFoJJ1Oy8xKaPDrus7y8jJer5cTJ04QCARwOp1cvnwZVVXlhGYikWBqaor19XVCoZB0iapWq7IBd+XKFfr6+piammLv3r2kUim6urpYWFjg7NmzXL58mVqtRkdHBzMzM1SrVbLZrJSeFmQFVW1p3gu2Uz6fl2JlIhAJZcrOzk5isRiNRoPBwUG8Xi/pdJqnn36ay5cvMz8/L3H/SqVCZ2cn3d3dHDhwQGrct0/Kt+PuBw4cuG3r+vLLLz96q3UR6wX8oyEK0fMQG67Q9xfKl0JHX8gyDAwM8Prrr/OZz3yGhx9+WEoziw0WYO/evbIf0tvbS39/PwMDA7KxKjB64RI2NzcnpbObzSZ9fX3UajVJPRVrKjb4dh6+gLXE+xYSEE6nU1adm5ubjI6O3tS8v+OOOzhw4ADVapVUKiWhM0EP7erqIhgMSpi0/Xy1D0++973v/aHW9V2xASzEE48qSkvSWZUX1fbFpLQgIaOxxRpQDAYUMS6mqKiore9VBXQVg66j6E1Mqk6zWsVlMJFObKGZjLgcTrL5PE6Hk3qujEFpkCgVsAY6GN29i79/4luEo1H8XV2sra5RLxXZt2+YaqNCwBPijSuXGDw4Qok6DeoEO/zkU2m6uiL4Q0HmFpeYW1xuvT+TmeXEFssbCTpCAbZWVtm7Z4jJiXE6OiOUSkUCfh+NWhW2Mwenw876+jodkU5MZgu1pkalWmdtfQOb1U5ic4OmppMrFwiHw+zaNUBPrA+zw83T33mO6WtTlOsVdBNUmw3SiSQ90Ri7emPEolFcdjtWmxWUVhBVDCq6ptPUmxi22Ve7Dx65rRtAe+Z/K8nndpbQrR7th4AexM22vr5OLpeTZt89PT1omsbKyorcIHp6euTr/X6/vNF2796N0+nk+9//PkeOHKFWq7G8vCybfkIArr+/n2KxSDwex2QyceHCBTlrUC6XuXr1qjSoyWazMqsUeLMY9hGyxDabTcIaqVRKNkoVRZFZv8vlIhKJMDc3x+nTp0mlUiwtLVEsFnG5XBiNRgYHB7nnnnvYtWuX7EeIIUkRHMSxLVx329b1lVdeeXRn4Bef4Z02hJ3HzufFpH+lUpF2iJlMBrfbLTcBl8slnbqGhob4+te/Lt3CBAurUqkwPz8vKcDXrl3DZrNRLpfp7e2VlFvhvFWv14nFYrJhnslkZP/I5/ORTCaJRCJEIhEpshcMBslms5RKJTnTIGYVAOkSJuZRCoWCNI53Op3cfffdWK1Wrl69ytbWFoVCga2tLaamppiYmJA0YcGE20mYuKGEwA+9AbwrIKAXL4zrIju8IRfwzuqR4vv25wz69kAZoFQLWNQmjVIRQ6HK1OQkHR0hUAzs2b+X4jZnvFIoMjV2lYHdA1jddhpak/RGApfHQXJzjXpqk+TiLI1qhXvue5BLk5NEu2LUKnXWE0mOHD/G4soyhVqNrUy+xToplDCZVf7ks3/G0laKsWvz2OxWQmE/ufU1erpjHL5jP4m1OLHuLkJBP4P9/TR0jaHh3YxPTGO2OwAFk9EBBpVGUyNfKaHTao6ODPfz0qun8QSChLti/O3f/m0roOSTdARDBNwuTIpCtCPMfe+5h6DX02oSaq1MQqNF5TMo26P7jdbzzWaTD3zi53/kENA/ZV3bD4FrC8x1aWlJBouhoSEZ3MvlMvPz85jNZjnAJW4o0Zibn59nY2ODgYEB3njjDQ4fPizpgYcPH+bixYvSfKZUKmGxWEin03zta18jkUgwMTEBtPx6RVA/fPiw5O47nU56e3txOBwEg0FmZmak4YvNZsNqtUqLSkGb7O7uZmxsTCp6nj17lpmZGSlA1tnZidfrJRwOMzw8TE9PD3a7/SZOfjtFU0AFmqbxUz/1Uz8SMbhb9QJ+0PFOv9eOuYs5CqvVSi6Xk5uD8OXdtWsX+XxeyiL39vYSj8dZXl7GbrfjcDikvr7X66VcLpPJZKhWq/h8PjlvEQqFsNlsLC0tsbW1RTqdlpO+Qn9KQIpbW1vStUvQemu1GjabDUD2METTtlarSctJwffv6+sjFosxOztLOp2W8yybm5tysE2ssZjtaK+ab7WZ/rBaQO+KJrCm67D90Lc/9K1EpIT+T/tzQjyiqQC6CooGqhmjqlE31LH7rezaN0KjXMLr86ErrYttM5HG5bQzevAAmWwWrVyniU60u5szzz+PYjHQPdjJpddfI2Cw8Bdf/jIHjh0BVeerX/0r/uXHP87C/HXOvvIKg6P7qOaLLOTzXB4bZ2ljpTWY0lB54IEYb41dZTW+QaOh09hMsPDs8wzEoqRyee7Yu4dqqeVa5nb5iHV3c/rMOcKRTmx2lXK9htVup1Kt09EZbVnCradwd8SYnpvl6twiitlIVWuwb2g3w0MD9HRGCYeC+BwODCjohlbfwWg0U623go1BVQANRVNAaZW13LYQ0TpExi6+v1WgeKfnbnW0byYGg4Guri4qlYqkWwpGiMfjYdeuXRSLRba2tnC73fj9fs6ePYuiKHLMPpfLceHChZZt5vHjXLx4kWg0SjKZlGwOVVUJh8O89tprzM/PS7OX97znPVy9epV0Oi3N55PJJN3d3ezbtw+DwSC9Bo4ePcqePXsYGxuTVUilUpFVgd/vl693u92MjY1JCMVut9PZ2cng4CCxWEzq0Ah+OiDx4Z3ZONyAK2730Y7132qN34kpdKvnBcQhNL9qtdpNkJCYFhaZ+uTkJF1dXdKN68KFC/h8Pjo6OuTw1PT0NA6Hg3Q6LafEhSZUR0cHFotF+iiHw2EUpUXHFO5kokqoVqvY7XbpzfzWW2/J5rPJZGJ5eRmHw0EkEpGJSTv9NR6PY7VacTgcZLNZ4vE4FotFUpqFR7VgoIkZifZkuP38ieN2NIDhXQIBza1uPNr+YVVVlQwg8djWFUZHBUVFp2Uag3igoKm0GESqioYOqNRrFVAgl8szP7+Aw+XC7nSwkUhgMCg0mk0C4SCJVIJKrYKi62yurRHb1U9Jq5GKr/PC954n1B3lS1/9ayKdnYSDIc6cPUsoHCafT/P4008TjkRI57KY7HbS2Swra3Eeev/7eevqOD6vn1Q6Q0PXqNXqGM1mtra2cDmdLZjK4SDSFWV+fh6X243VaqNcKjG3tEogEKSpgG4wYHe5WFldw2B2UK6WqVSq1Gs1sskMLqeDkaEhDh44SE+sm4DXh9FowuF0oRsUrHY7qCoGo3H7XKqggI6CBqAroKoMjuy7bVBBPB5/dGd2LwLb/xtD6FY/E1TR9gy3VCpJOV4xXCRubCEbPD8/T7PZxOVy4Xa7pULm0tIS586dw+fzUSqVJGzz3HPPcfjwYV5//XV27dol+wWzs7MoisLRo0ep1+sSG4YbmPfGxoa8iUX5vrGxwcK2IZDVamVmZuamnxsMBgqFgtyUBJVTMJ6OHDnC3r176e3tpaOjQ/rnikEygaPvPH/ie1VVGRwcvO09gFvRfHf+/zthoXeC+MTPxd8UWLl4Tb1el9We8IAQfZZ2WYTNzU0mJia477770HUdp9NJoVCQ/gvr6+u89tpr0m9idXWVarUqzd8XFxdvoiCLeYpyuSyb6zabTWL8AwMDGAwGtra25BS6rrfsPMU0r9gQhFew6BXVajUJabndbln13OoeEYdIqsTjx6IHMLuy8ehOCEBT2KaGgoaOrrRilE7rORSlFeS3v+rbPQMFQAFNUdAVA6gajaaG1+vDE/CRzGRxuN0YzCr5UpFSrYxqVsnksuTyGex2N2VFoVCvkc/m6eyIMnzgIN987ElMLjd1HZwuL8GOCKlcjpnFJX7hl/8nXjp9hhMPPcR6KsnU1DXsTieRriixri6OHz/G8sI8m1tboEG9rlFvtDaDWE+UWDSKwWhkcWmZiclrsokY6e5FNRoxW+1gNDE9u4jRbKZebVLI5mhUq6wsLNDdFWX37j3c85676Ip243S6MVtsmMw2MJhQLRaaqDRR0VUjimJEVwxoqgEwwPa/UQwM7t5z2zcAsa7i8Y/JSG8VyHYezWYTt9uNxWKhUChgsViA1k2SzWZlwxiQeixCUdRoNNLZ2ckLL7zAzMyM5IUXi0VsNhtvvfUWhw4dkoYyDoeDSqUiNxGv1yt7B9lsVs4DiBtT+AT4/X5p1iIM3Lu7u2+CwoT/rJgKbZcYuPfeezl48CDRaPSmDHEnLnyrwNt+DAwM3NYeQPu63GrT/kFBv31j2pnptlc1gAyI9Xpd+jsIKYZ0Oi3tPwW8J1hA8/PzOJ1OTCYTgUAAi8XCzMwMFouFWCwmIZ9yuUwymZQOg0NDQ9IFTFEUeU1pmobD4cDn80n113g8LiUqxLXWbkNZrVbxeDxysxc9BNF8FnMs7fpX7edvZ7C/1X3zY7IBrL/tTbR/1Js/uH7Lh6KAqre+SqhIVVF0MBqMFAtFKrUmRrOV1c0EjYYKigkNlXQ2j8FkJeAPs5HYIpkrEu6KYrE6UIwmVjcSxPqHefnsWTa2Mhw8cIgLY2MsrMTRVRNzswvMXJ9neTXO6MEDlMpVSuUK3dEomVSSTDJBNp1ksLefeq1KpVIDxUClWqVRr+F0WLHabZQqNUxmM+lshmw+RyZXJF8uEe3pYSOZxu720EAnm81Rr1dIpZJksmnsLhcHDh8mFuvFZLFhMJhQDCYwmsFgQlGNKKoJRTWhKiZQWpuAoqrbjCsDqEZU1cTA4O0LFKurq4/CrQPS29f1Bx/tG0d7cBGTtAIjbpcPKRQKaJqGx+ORrlGiMSvYHQMDA5w6dYpKpSI1dmZmZiQkIMTZuru7aTabXLlyhYGBAXK5HGazmWw2i9frlQFKaLxUq1VsNlvLN9rlkuwQXddl2d/V1SW9CoSMQKPRIJvNks1mMRqN3HHHHXR2dsqBKPG5dz5uFWzFzwwGA319fbe9AvhRHO0SEoLBJGAV0bgFbtoIxcS41WqVPH8hzma328nlcqysrDAwMCDlFHp7e9m1a5ds0Pf09BCJRFBVVfYQhPCb+L8E80c0c/v7+wkGg3JaV7B/xPeKopDL5W7ydhAaRS6XS7LSxLyG+Dw7N4IftIn+WGwAM6sbj6LegHlQf3Ap+U4NRFWBG63g7cyk0QQd7DYbiq5jtJjxB0IUsiUSiSTlapVapYauK9jsLgrFPB6vn/XEBmabFbvJTNAf4PyFS6wltrg+N0s+m8VsNjO4exiX3c316esYTC32Ri6fZ2Fxhb17Rxm7fBlV0ZmZvsbekRHm5xcI+PzUmxrZfAEFKOSL+D0OOju78Hg8XHrzTcwWC+FwGKvDjcc1SVJYAAAgAElEQVTrZWZuHpfPT6laI5POoRoVsrksW1sbNLU6e/btJ9bbi8fp3p6iNkjYTEdFUQWbavv8bjfMWyesxbJStofxdu3qv60bwDtliTvx4vbjnWCC9kPw3M1mM4qiSBkJYda+traG2Wwmn88TCARIp9OYTCaZsYnmnRAVm5qa4vr163zoQx+SgnCC8SE2kuXlZXp7e5menmZlZYVMJoPf72d2dvYmv1cRAIxGIzabjdXVVZaWlqSAnWgMZ7NZcrkcqqqSTCZRFIX19XUWFxfx+/0cOnSI4eFh6XT2Tudn5zm+VdDo7e29bev60ksvPfqPyU5v9TuiKb3z5+2vEQERbmwEQkFTBFiR+QuYRgRWYeCi6zoLCwtyk+/o6GB6eloOWm1sbLC2tkYoFJJOY8VikfX1danJZLPZ6OzsvGnoT2wQLpcLXddlpSBsS4VTmdD6dzqdUuOnVCqxurrK2tqanHJu1/UR52Zn47d9jXeerx+PDWBl81FEEJKOAK1H67Pe/Fz777XM41V0VUXXFXQU0FoTws0mNLQmqqKg6k0MRpV6vUm1Vqem1XF6XRRKRbyhEJupJEarhUQmSyTaTb5YxmS0UdYUNIsDq9PFex+6n63EBg6ng41EhqoGb41fZe+Rozz8iZ9mcmYWHR1Fr7O6ssTm+jpDg4NcuzZJs9nA5XKgGlQmp6dBbWHwqlGlUCmRK1c4e/ESyVweh9dHtlSmVK+gmM2oJhu6biCdTGE2KLx58TRbiS1Uk52h0cMcvvM9+MMRrEYzZosNVCO6wdCajTAat6E0tQWLqQY0VUVTVVBamb+uGNC3vw70xW57BQA30z13NrPaaaDtz99q0xBDNO0SEuL3zeaWllJnZyeVSkVmcbquS4y2PTj6/X4qlYoM8rqus7S0JDn2gpkjKH3hcJiZmZltVdc9MtsXkgJLS0uyoalpmpQuSCQSQEsgzmw2yyAldF2y2Sy63jILSqfT+Hw+RkdH2b9/v2wQC4jgVtk+vF2fp/3rNiR1WyGgd8pK/zGPne9dQDjtMwyiHyDgHkBWWQJuE9O3wgxebAqiqSq0mkRDWWTdhw4dolKpyFmATCbD2NgYqqpKFVlRrYkBTKFGK6AeRWkZtAu7SkB6log1E17UYs4hmUxKjwCn03mT2GF7xSau9Z3Hraq/Bx544Ida13cFC6idxvZO2V/7SdrpPwpAU5dZr7L9N7VmDb1aodasYTCqreliXcNqs9Oo14ht68JXKjVC4S50VAwGE/OLLVGvUq3FrHDY7Hg7usgk4/zqv/13/P23/5a9B+9gemoGs9nI5770l1xbWSToD+B0+dlcW+H+EydQFJ1LF85z17HDXL0yRl//AMlsju5oF7NLcVSDiXqjQbZY5urUtPQ79YcjLc643Umt1iCf3tiWiyiymVinVixTQ8WlGLG43WhGM9WKRtmmgd6i0BoVERB0FKOglG2fK00DTUPRkc/f9PPbuK7tXxVFkYF751q268S0v0Y8J/4tgr94iCab6JsIhowQ9BI6LULtUYiLCbMNIUL2kY98hMcee0xmk+l0Gr/fz7lz50ilUrznPe9hcXGRaDTKsWPHWFhYaE1TbwcFQCqPKooisV4hRV2r1XC73VJmQNM0EomEHEITypbNZlOa2GiaJimiIui0m7uI2Yqdwb79a/vP//8+2q8DcYjgL64HUcWVy2X5+cSUt/ANaFcEFoNxcMN43uPxkN2u0gOBgGTiBINBAoEAr776Kvfddx8DAwOMj49LqrDoxQgJCiH4J7SEFOWGKq2wdazVagSDwZuqUQFZifkM4QAneghiILC9+m3n9u88R+3n73Yzut4lFcDGO76JW8ED4mv7zwxsQ0i6SqNeo1GvUq/XaOQzqLqO12Wn2ahjt9vQGg3sNiulQgkUFbvTiabp25zvIgZVxba9cwtIodZsXYilYh6n3U4+myEUDkGzxn3vvZ9XT59hdWUNg26gXEi1NOazKY4dO8rUxATDw7uxO+34fD4mZubIF8vbDW2dRkNDNShYrFbC4bB0s1JUlVqtTjqVplGvEV9dJJncJJlIYLTYUC02jA4nDrsbk8mC2WpGNRhRUFEMLehHYRsS2lExgQLKjU1TfN0V67ptmeLy8vKjtwpOP2iN37axcyPzF8FSmGUbjUY8Ho+EWsTNK4KHCJqikSd43aJnIIZ/zGYz5XIZv98vmTb5fF4a9aRSKRl43G43tVqNAwcOkMlk5E3u9/tZX1+XcJEI4GJ2QeDZoirI5XLSaWx2dlZ6ygo4C5AzBe3UQPE5xHlpP2e3ujfE99Fo9LZWAP8USuIP+l0R1IRaKyAHqsTr2je/dppleyIhkgGRYIiBPkGlFcyhUqkkB8QsFov0kA6FQnKSWtiMejweWSGIWQ+xMYisXrjJAVL2QRgb1Wo1aSwkrhMBFYlNRnzOnev1ThDfzrj34IMP/vOvAHZm/jtv/vayUWRcb+MYo6HpCrqmozWa1CtltjbXsDfrxPYMo9UbWI0GbGYTNBtYrZbtxoybhg7NagWr2Yzd2soYO8Jh6eYk9F5UVLS6hWAojFlVSCa2iHSEGZ8cp7sjRMAf5sVTr3LP0VFS6Qy7+ru5ePECg0MDmI1mxqeuoSkmnE47ZrORar0BTZ1guOX4FI+3MEmhM7Kyto6i6S2xsbl5UDTSmQyKplBuxCnVm7gCIa6oFgrFEqVmD+FgAJ/LSbOhYzUaQNFRdP1GkG/7Hgzourb9vd5qCt/Gox3TfKeMtH29b3VDtGf+wrhFOHBFo1HpnSAChCirXS6XHPqyWCxS5kE0BeGGLpGwHLTb7SwsLMis8/777+f8+fOYTCbGx8fp7e3FZDIRiUSYmJjA6/Xi9XpZXFwklUrh8XikoYcIDmazmWQySUdHhxT5Wl1dldaJa2trkoao6y3PW0VRJOMHkH0Fj8cjDWLaG6TtRzue/KPM/G8VyG9Vvf2g14jnRAWg67rU3Gn3CxAyGrquy81A/FtcT8IBrf1aa/cR9/l8KEqrKZvJZIhEIly+fJmDBw+yf/9+pqengZb2j9j0i8Wi1FYSTX1ADpKJhrKoXGw2G6VSCbvdTiaTuYn5YzAYMJlMskoQ0FAmk5ECb+90/t6pcrodx7uiAphavEEXfKfjVnhn+6Ghof0/7b1Jk2NXduf5u2/ADHc4fAx3MoIRDCapLHW2Ka3UKWWrN2Xa1CLNalP9efordG/KrPpDpGnRC6llVdZqSV1KicosDikmGaN7+ACHY57fdHvxcK5fvIAHyQw4GWLgmIW5OwJ4AO697wz/c87/pERBjPsd4smELz/7hHt720SzGZ7nsrGxQRwGFPN5wjDGcYAkwiMhDibkXZjMQnzfozRPCnmeg05i9mpVrq4u0HFEHAS8ePaMVqtFQSl8FEXX5ezsnHsP3+e//X//jT/6t/+WKA6I45AojNjfu0OzM+D49JThLGR7d49et5tW4SvNbDblg4fvc9lokCQpNcMsihkMh0TTgOblJbNZRDCLiNHEUcxsMmMyntIbj2j22nR7EyrVKoV8Ac/3cR1wHQ/lpNxJKDXPPaiXPH/hV3pwtL8yT/H58+f/W9Zj+bp9Xaa4xEscjUYMBgMzW1dYJ8vlsqFgkOdmPUK5yQTPF44V13VNAlY4hi4uLkwLP2AolR89emQqRKT8s1KpMB6P+fjjj02eoNVqLTBgPnjwwIwCdJy0m3s0GhleeGBhUH0QBGb4uYwMFGhLlFoWS7e9RPunyOHh6iK7bxsB2GI/V/ZaDMDV1ZUx1tJoZdfEy3OzpaL2Wsi6CwQjsFG73Ta1+ZKsf/DgAV999RWFQsFQP0jy3vM8QxtxeHho5hZItLGxsWGI/GQcpyh5+cz9ft+cOxlEA+msCfnO8nkl55CN6rK/Z+UHkQOAl1kEl1m9LL75cnlo6hXkcjkaF+ds17coFdJQbmNjg8loaHhaFIokSgiDANdVqCQmCQMcBXEYMpmMCcIZydzLaJyf0Wm1yec8SjmfnZ0ddBTz6F8+5b13jvjVP/wDla1t6vUanufzF3/xF9x9d487+9ts1+v89rdfMJyM+Z//7M/43//T/4l2fIIwZLNcIHEUxWLRUBNI1YhfqpDEMZeDC5RWQAw4oBNczyWaTug0m4wSzSCcop0id0732d2uUy4V0db2vrxeLPyfvearFBvbv4kfJruf9lwA+VuUtUAkkmwTTnZRBnINufGAhcSskHoJ6dZoNDKVOMILUywW+au/+iszTrJcLvOjH/3I8PH83d/9HaVSiaOjIz799FPy+Tw//elP+eu//msuLi4MF4wkedvtNkdHR3Q6HTMxTJQ9YEjGZB0mkwkXFxeGbyYMQzY3N00SMztJLRsFZGG3VctNCumbev5ZJSde9Pb2NldXV0aRCu4uZ8eOKCUizDaQSo5HjH65XKZSqXBxccEXX3zB7u4uWmvTO3Lv3j0eP37Mw4cPFyan7e3tUavVTBOfwEjC/yPJXN/3TQOf7Lnspyh4oeSwWWYlGpZoTc6xnAl7jbKGYdma/r7yRhgAlcznW8YJSqAedbN3Y4d+10lf0CohiiMG3Q4qjigpj1ypiJ/3cLw0JHSVwkERJXFaFeO7RElMrpAmdCqOIk40fhhQSGLOLhuUSiVaZxcM2hfoJEKrhMP3HlDe2iIIRyQo7rx3j/PzBvnzF/yv//E/8Jd/+Zds1fcJtMsv/6//h6N3j9i9c8Qv/4//zDt3D2lddfBcl8T1mU5GxPMcwxdf/I4oTEhixbg7lBWadzZDWsPpEQchCkhmXcbNKcF0gFuscufigHfePUwP32YNr+CjVQr7aGe+jlrhaoVWknjSaJ3grFhZLDPqr8oBZP/fVmxSP99qtahUKqbMTrx8uI4g4JoewS47FBFlLzNY9/b2+M1vfkMul+Py8pLd3V1+8pOfcHl5abjdLy8v+fM//3N+85vfUCqVUErxt3/7t1Jjz69//Wvu37+/0IsgnryUo0rlSvbmzq4ZYLqcLy8vqVQqNBoNGo2GwaltGGiZ42QrjVUbgW87ieom5SUKUniRljVfyettg247gfZnkZyLFFPIcB1h+KzX6zx9+pSNjQ2ePXtmaKeFNnp/f98YH2nWkrGaMrVMPps9zF7mL0i3cFbkXEr1kjSByR5KA5lNL52FRpdB46uQN8IAwDfnEVeJRi+BqrXWRHHAeDDk8sULwn6H+/t7FHJ5g63m/VxaEorCVSnskXddmM1wcvNB0a4mcsB1wFOwu1VLiacmfTzf4dmTEzw/HR23f+eIcrnC+dkpf/onP+P8/JxatcLz0wY//5M/4f/+r/+FWMO7997l+PyU/njCL37x7/mHf/wV+we7XF1dMZtNTNjY7fTNYYnjV21wcm34Yg06JB4M6Z694Gl1k53ddwh0nly+jNaagjcPkb15k4mOibQ00b1crfNdy9d5jgLHXFxc0Ol0ODw8NDcdYBgw4Xrmql1jPZlMXiqfKxaLhpdf2BgBkxDe2dlB63TYu1A0dzodfvGLX/DLX/6SRqPBxsYGnU6Hk5MT/viP/9h8Vuk4FvxaIoxlxugmEUMxmUxoNBpUKhXq9brpfAYWlIhdUfV97ePXSfYelw5ZwdKF3+im7/CqyEYMnlRfSUf36empMZrFYpF3333XTA2TcyXVP3EcUyqVzNqXy2WazSa1Ws1cW5LBosztCV03rXtWccu5lWqvYrG4QFQoEYNd6XRbUfobYQCWJZBcpVAaHA3otMM39fcTHJ1WtySkbUxag3I8iBPGnQ7dxjl+NOPOH3xAHIaMo4hytQL+/BAphcLFVcqQaMVhiO96zFSISmLybp6C7+HoBLdUwjk8pFLw6bWuOH72LMX4ri7JF0vkcjk8BaV8julszPHxMyqVDX72s5/x9OQFm1t1CpUqo9GIL7/8kp///OdcXqYzYOMkYTycIvv6red8aiCO0NMJUbvFi8dfgltkMBrhOeAeHqB1mnTSSYyj56WhSi0cXK01rPhw2V5alvM/+5wsDGQ/JpVYrVaL8Xi8wOdjl0WKEsyWCovStzl6BHqQoS2bm5s8f/7cTN7q9Xqcn5/z05/+lMvLS+r1Os+ePWM8HvOHf/iHnJ6eEscxOzs79Pt9Tk9PzUxXgZlsWgCb0/3brJ98lhcvXhjvVIjwHMcx9en2+mW9/+/aIHxdkh+uvXX5XaqsRLnedB05T/a5EiUphl/OhsBnQRAYqAYwXEoyOEYigSdPnhgKZykz/vDDD+n1ejSbTVOgIWdKijXg1Q7sTQZLChSkUglgNBotDHyxYdDsmqxiX98IA/Aqedk4XP/t6JQfCLiuCXccoumUn/zoPsdPvuLgwUO2tuu4au5Za42nriEVk1xS80SpSKJxEo2rwVcOecejmEspeUkSU+43m8149vwpAH4uz8XpJR/9mx9TKpXodPtMwnSk4/D0jJ2dXT799FNG8zLF87Mmjqfw/dxCKAkS4txkDOahsfWIIiHodRgoh+7WKafHRQ526tQqZbxKmnTKeT46ZU4y62kritusFv+6nM6yv+Ux8XCluev58+e89957VCqVhefZN41dfeR5nsH87fcScrY4jo2XD+l0J7sRqNvtMh6POTg4MLDOvXv30FpzcXHBzs4OX3zxhSERu7y8NDj9eDx+aajHt1036VCFtAJFZgTL2bWpCmwjkK0tX5V8nRK6Caqwf7eTv+Px2MzfFUbNbKFHNkq18x/Z4hAxklqnVUVS1qmUMh68DOSpVCrpmNZWyySBZV6vTITb2tpie3ubFy9eGCqRLPz4KvRimfKXXhRpPpOqMJvC2zbsy4zIKvIAb4QBWOalZA+L+Z3soUp/JnFCGIQMux26zQt+dXnGB/fuUMqn5WEyji9JEhJSw6GcuXcIMF9sd55XIIlRcUwwVwYqjBn2J5QLG2xuplhfsVCg2W4RzEI+/+2/cP/9D/in//45tfrm/JBt0mhcMR4f07i84uGHPyKKEk5fnKO14v79+zw/OTbfJQznSd6vkbRo0/oDUqUeBYTtC86+nBGP25RyPvliGbVfw1Ee5DQ5R6EdPYeQMm363zb6+BqR69oG3N7rZd5hdt+l9r/X6zEYDDg9PTWcLsDCUA7bS7QTzpJktG9WKc8TRS+TuaSNv9PpmGlfhUKBzz//nGq1ahq1ms2m4Zt5//33Dee7Uoq9vT2azeaNpZrfVmSs5Pn5ucGebQKxQqFgSmGzebJVvP9N8rrGRZTc7u4u4/HYzAKw98yWLOa/LHckRiWKIjNXwO4diOOYZrOJUumYx93dXTzPY3d317CwilMgU95GoxGQGhhR/gLx3ZS/+ibfHTDXli5xaRSTKPK29k7kjTAAzOEHra1adB2jlJNCPEkyf1wRKXCtc+fM1yeOEwqeQ8lXlD2H0XCAv1WjkPcYD3qU6/X5gXUIogTXt2ACR1SqJu966DgmiWLiyQhv1CUc9BmMe+Rqm4TxmHg2YTYLiJKE8aDPhx885LzZnJcJVmn1UuKx//6rjzk4uMPZZZMgiPjk0885ONjjonFJtZrn+fFTcn6O6TSY9xosVq/cuFw3/gEkMVHrisswIgxjwjim8Qf/Iz/50OWdjTIF16HoODhegURF5mZTkklfsdie2rLy3ezzst6leOrixQvDojT1CCcLXPPGZCMBGwqSKg0ZxiLDXuS1dpWHMH9KIrHX6+G6Lr/73e8M/UMYhjx//hzf901JoHDKC/Rgh/Svs46j0YiTkxMDn2idsldKNZSdC7HXb9VRgO2Vws2eaNYBEBHPVs7D8fExk8mEg4MD08AlBG829JE17Pa1AJNQLRaLJk8iJHwC3Qg9Q7/fp1KpcHZ2xtHRkSnDTZKERqMBpBi9XRkkrxMDnPX+v+1a20ZAa20ooSuVysKZFmNmyw+qCigLRchPURoLnqIF+9geH4kmUQnECbXNTf7gw4cpC+DJCXv7++gonl8PlHIX38+6tlwXHeMSM5lOCCdjhq02s26H4WTKxfklsyRhFoS02y3K4ymFSpWgccX9Bw/5L//vf+XZ8RmOA6enp+TzRYIwxlHa1Jan3YI5Htx/yJdfPjI39KokHA1oXpxz/PgrZnjslArUH9wn8R2cXA6fAJzrm/A2IKCs0s96b/YNLWLjubK/cp07d+6wv7/PbDbj4uKCBw8evOSJZSuH5Kddby3Q3Xg8ptFoGO/z4uJioQa/VqvhOA6fffYZW1tb/O53vzNJxvPzc/O5ZvMJcxKt5PN59vf3OT8/Nzj3qmQymRgjoHWaUPzoo4/Y3NxcII0TQ3gbBiCrfF51/WWQn53UlBJfmc1cLpcNbCb7Jk6KfTaykaR9XVHaYsBlnQBTUitNdYVCwXSES3e5nDl5XKgfJpO0YGM2my10Zr/O+koUJNGj4zim2qjb7ZoIwX7u676nLW+EAcgmseSnbPYCeVQWDpLfdUw4C/C0Iuf5JLOQZ199RUX5lHyf3XKJOAyJlAIcvJyL57jESYSjwUGhHQccnc4THo/Roz7JoIMzGzM8P+VyPKQ/mHBx1ea01SLQGvIFSsMJl63f4uRyfPz5bwmC9LAViyUGwzHBcDz/DulhLZVy+L6H63o8efJkoRNwJRurQcUJut3i+a//kdPjE6atS6Z/9u/Y29nhnd0t6oUcrj/nmJEXxasNN+19tQ25JO+yHuQyrNP2dh0nZVD89NNPuX//Ptvb22YamN0cZGOzcD1JTCotZrMZo9HItPm3Wi36/T5XV1dmUIdSiqdPn5oktCQV5T2CIDA9JYAxAoL9X15e3so0LsHJj4+PTZPYaDTi4cOHZjC8VEDZr3kTJGs4RIHKwHchb7MTrMu8X/t6y+gxxMADXFxcoLU2RHGQOgHSrSvrKQbGHgYjz5X9BkyjWnaNX1ekGk0+o1BOyxmy12GV7/tGGADB+2xLng2vst6iYxuCROMCs9kUnUTkXZdPfvPPNK4uUJMZk8mIzrBP/c4Rtfo2rp9LidB0WhWTJAmJjkBpXFfhxorZbEqn2aDkaKIk4rJ5zuPzc3Z294niGdNwQr5c4umLF+zsHTCLQq4aDcJEc+/ePZ49e06/nyoMx5nXpQcBw8EIz0urnHScsLO9xWSaMgWu6kZVMK/pj0iGHWbBjKe+R76yxYf/5n+gWi1T9CCPa62lRiWrV1Y2VCAG3e7CtaOELJ4qB13ggFKpxN/8zd+k3ExzrvfxeMzW1paZoyoenFzHThLKDS4skJBy88gsWanR9jyPRqNhEnNSVnh4eMiLFy/MTSkUBcJBJEZB8PmdnR1OT09X6oXLdwmCgHa7zZdffmmmg0kEcBNn0KpkWb5mmdz0/1n4xvd9Q8onJGvi7creyzkSXSFnyW4Gk2hMyjnFkAuWLhO7CoWCSegKF5Q4JXZToX0/lkolE+FJQ5jNSfS6ImdVSpNzuZxxZoAFh2ZljiJviAHIdotm+X4WogM0SjlonRaBOjqNApIkwXEhn/cZDvtMJqO0Bnw6otfv8m7uA9O4kc8X0SQo5hGG0iSkVUWyzI7j4ebyJDH4xSKR1ri+l7aDo8n5DjvbW4wnIZPxgPpWHVdp+sMxo36PnDvvAkQzm8WEQUCplJtzC7nESUjOTxPU3W6X999/n6dPn36jHMA3WlPSdLIDxFHIuNfh6uKUam2Te4d71Mu75EQxyYFasaKwb1Yb97UTfbYRWEzuL8I3vu/TarWMZyeDuqUnQGu9QAVhnxn7fe1eAIFttNZmwHihUGB7e5tyuczl5aXhFBJPUcpIxZhIyC58UeK1VioV83rh+VmF2NeJoohut8uLFy8M02W5XDZGwP7+tyFfVw1kG//sd7DhjH6/T7PZNPi91trMexAsP+tEyGPyt0zgEsqF4XBoegukui4MQ8PK6TiOSQZvbGwY2EnyCHJeRfGOx2MDHckY0NdV/Mui3SRJDPVHqVQyjLZ2FPCDiwDEimeVv50oAjlQ17+70gugFMqd456ey7377+G7movmOZ5OwNGEcYDvu+Tn1MGF4nzARhKlHbVhNFdY6dxhN5cjX6mhowluocLh3fscvvc+rWaTfnfA1tYWO3f22SiWOW9csrG1w48fPmAShpxedrh7eJiGdZMU/hmPx6h5w5fvezgutK46nJycoxyHr7766rXXUYpb9bySaE6AgEpCgn6b8+dfoYnY3dqgUizgleafx/NSeGrFEYC9rzbuC9c3r13tIQojG/VJDf+dO3f46KOPaLVaAAaCkQSo1N1LtYgYGfHUAeNhSjfv0dERlUrFkIR5nmdoG5RS1Go1isUiSZKYCiSZ1ytVK9m5vOfn5/T7fZIkMd7lbYhQW1xcXPDo0SNqtZoxRuJZr9Jb/H3km0QBw+GQbreLUsrw5At7puzbMrw/28ciCV+A4XDIcDg0BlFyRUIVASlsN5vNuLq6MnX4SikTkcgaCqQ4nU4N3YTkDCRp/Tprk10jcSTEgDmOYwoX7JLiVezrG2EAQpn6I7g/ADLeMR3uYur/nbTxy5kPMU8NAcSxRumEfKWAp+t8UKtQv9gHJ4eX89msHxDECYQzHM8lCRU4qZeqiQmi1KrnYocwDtCeIrdRxtcFojDkp//TnxINxgwO+gxGQyI3Vbc7tV3Kfp5ZEHFY36ZWr/Pw3gzc9IBOgxlX7S6dXpfhdJZODJpOSBJFtVqj27vmMpeN/33F8iUWHnfw0LMZo5MnnA37PN7ZpXbnLt5WlV0nh0+E6yiSFaeB7Zpme2h5FuqxYRoR+VsMRLFYpF6vUywWuby8JAxD6vU6Ozs7BioQz01eBxhCL3k/8dilYejHP/4xk8mEdrvNcDg0MI4weQq+rnUK7UnCznVdzs/PmUwmpmRPBs5IM5nWeiGRuGqRtev1ejx9+jR1SnZ2jHGTROVtGIDsNV9VCXTTa+SzFQoFtra2DDxXrVZNPkUiQBsqtJ0J+V2Uo91JK3z9AgFJAtdxHHZ2digWiwyHQ2MoJbqUxjSh4pa+CyxAkY0AABoISURBVMkfAYaEcBVJ/mWFEOK0CO+VQJQCa71qzb+NvBEGwLbi1/+WVweleI+eGwK90AwmNfSu6zKbpOFSuVxkc3MTpTW+kx6oOIxItIN20sRnFM5I9Bz88a43w3Vdkljj5wpMCmlJ387WJm6nwySYUSgWyW1sMglCrloter0eh4eHjGYhrU4bx3Npd/sUS0VmhSKzOB0C4vk5Go0LgiCaH8rVVoq8LClchtYE4ZST58952Lmio2LK+Tw5PGJn9Z6iKN5lHbryO7BwA98kotCkaqRWq7G9vb3QFSo3unhJdhLWLg+V9y8UCqYDtV6v0+v1TBQheLEkW+/evUu73TawQa/XY2NjwygLmRnQarVe8tAkgXgbIjCFsKTu7e2ZQeSAoRlZ9Xt+m8dFllUPiXGXyhdJyNo8RxJd2a+TwoAszCRGRUp37YhBYBQxNPv7+8bhKhQKZibweDw2PQQ2p5Tv+6ZkU9Z9FRHWTcZUnAiZH1Aqlcx3WJW8EQZgaXZb9L1erApycNJyTyPzypEkATRaKzzPR/k5lJ/Svl5dXXGneMR4OMLLpfjo1ElvSsdJoRNvbnCCJCAJA3QQoeME1/VTgjq3hCp4eL5P0Svgjib4nodf3MD1CpTPXvD4q0fEs5B7u7ts5HxOzi+IZ1O+ePaMYrXCbx89Tr3CwRjtOITRoud7aw07aDQJxDHxCJrnz/jik38i9wc/oVwuAyVKORfXWW0EsKxpx3wmC97LwkHZKEH+SVKsUCiYCh4ZryhzALLEcLZxEIoAMUaC+QohGVwPGy8Wi+RyOeI45vj4GM/z2NvbQ+u0O3g6ndLpdEiShKdPn5ooABYTdreJwct15fu1Wi1DaiZd0tL5etvyOt9RqDK63W46C3tObyF5gGxiVoy+QF22fpB6f9kDmSEs8E8URUaJB0HA7u4ujUaD4XBoOs3L5bJh7QRMJZi8r72nt7G28p3gesxkkiRmL1fZJPZGGAAkAanTblQNBkKBl5NNjuMg0wu1hE+JNJK5FMplHOUSRgkvnjxLE3OkHYelSoVSqcQsCgjCkHzBR8cRRBE6SfAdF4KAaDohns3IbW4Sa4WvfPx8kVgnuI6PiidcNZtsbG9SzBe4s38AUcxnn/yG/+VPf041n6dSyHMWRiRJxOOnT4jmnzFRaeeyfJ/bFsMkqoEwJOy2OP/qcybDMQkxH9x/n3I+Tzm32sOcjersG8g+vNkIQR6zbzallBn5GAQBjUaDfr9voCCp6xYPz8Z6JRch5YGz2WxhSpgkcKWqo9VqmeEfh4eHnJ2d8emnn/JHf/RHhju+3W4zmUwYDAYLA02+L7xduoVPTk7MzID79++bipJVSlb5vY4ytNdLePrhGobJNnrBNVxqlxcDpoRTCgKykYFEGZLvmc1m7O3tce/ePa6urgwMpJQyXvdgMFgoHrAdl9vcazsHKhGI3SRn3yuvI2+EAbCVhP2YHV4tWN1505eSJAGZ6ogEtOPi5HJs1NKu0UqlgjuvjpDDpYkZT2M8NMlsRhJGzOIIP4kIJ+nIxigISRyXWTwjCQClmAUTYmIG0yGXX56ZmaDlcpqt/9WvfsX+nTt0u316gz7j8ZQgihmNJiQJ+Dk/pXP+rhJ084YJ0+w7mdJ8cUx7HLKzs0NtYwunXsdb8XHIGoCsklxmBLKVYLYCEK+vXC5Tq9UMLYNguNIzYDfWaK0NNi9RgOQk5DMITj+ZTMwYv0ePHrG/v4/jOBweHvLZZ5/x93//99Trda6uruj1erTbbQaDgfEUBS74PhKvkgR98eKFqVZyXZe7d+8ucCatQm7K1yx73tfBRXaRgETr4u3aGLycG5v8zR6qYp8lqYKSclLAQIIy0Aeg0+lweXnJwcEBd+/eNXTOw+GQdrttcig2O+d3LRIFSe7C930Db60CCnojDIDt6V/DQYswQfqYxlMOsbIoUvV1JzAx6ARmOkmhmmoN11Gm1l+56Wb2+33cJGQazFBKEyYJ4WCMjmL8nGY2GaKDiMT3CZTCyxfoXL5Az0I8xyWIQrSCUb9J4+yMfi+d3+v7eRzfozMcc/b55wxmM748PmE4DUk8l4QUjU/niUqTlEuSrA7Te5XMWY9I4piw3yOM4cXzpxzsHqEThbeztdL3W7av8niWR0X22g7nJdyXiEGgACnjg+sksYTsogjtennpzu33+wvXz+VydDodms2mabqZTqemxFQw3kKhYBSDwD8nJycLBHNinGzah+9SYcjnCMOQXq/HyckJtVrNlBJ+H/Kq77/MOIjnbf+URKgofIF47IS/rSPsai+p7JGoUFhlZVi87/uGZVaMheyfUHuI0v19yfx+H7HXRamU16jX6xlqEVmTH1AEkKA1pN8nrfhxUfLr/DmgnGvlD/NDJJUlSYwixJnPwCXR5L08XrWaYr/jaeodRjHT8ZhJt8mw16daKhKMRwy7HZQDnufgRzHBZMxGeQOabSobVS6fPk3bspVr8OZgMOCyPyBqd0xNuNaaZq9DuVwmUbBd2yJotxmFEb6rwIXxaILnu2gtePHXsX++7gKnP2K5vgbCmOJgQO/0KZ9ubdAZ98irj1b7thb0Y8uy8k8ROwLIRgzyU6AauanFq5eKnG63a6omer0eUhHS7XZN8ncymVAul7m4uDBDQuxyv3a7TbvdNoO+Hceh0+mQz+dNM5AQvsm+28R030cEIGLnA+zZwquSm2r7lz3vpnWQPI8N74iyE8zdVrzCj+O66WhXqe2X0Y1S5ik5HLiuQpMIzTYYwtskmLrMiZZGQCm/FLHPqt3hfhuSrQqyK+IKhcI8b5f2wryuvBEGYJklUzeUJGaVhfmXJCgNSifEaBw0Wl9XE2jfh2SOCScJF41LioUC3X6PT/75Y9AxxVyeT/7lMz68fx8VJRTyeUINjnI5OX/BdDpLB3Ps7jCdpMRkj1+cmCHl9Xo9hRp0jBtfc8Dvbe/w7OyCINGUSjlyOYfpLLSU2+0n6ZZJQMC0cU7g+ExafUrOaj3FV+H+dlSQxf7tDuKsAZB/Nuwj/xfHMWdnZ+Yan3zyyZxzqcDZ2RmlUolSKZ3fIMri9PSUXq9HqVRid3fXdAk3Gg3DGCrYq+DKAi9sbGwYAyOJy9to1vk2IuvcbreNwlx1BPBNvpsdGclrsrm87HXECMie2uXBw+GQyWRiKr+ExC+NpiPzWlHeMo9BIkaJDCUilGof+70Bk0cSQyRlpTbFtHy/25Lsusjf4vBMJhOKxSLVavW13+uNMADLkoWOcpZCCDcZAHSCqzVJAq7joBXEaFzZMDedpZvM36O4scFGpcyv//EfiVDoKOHkxVMuWh0KpTKz0YhSqcx0ltIDDKfpHM+o3eKdJB1PmMvluOoPUF7aaHLZTRtDvJxHPBjNo5oEL59ja3ODwJUqBk2h4M6bO267BPRmiZWGyYjxRQOimEcbr3+gFq6faVyxlYEN92Sb/+x9tZW/3RRklwdK96ckyjY2Nvj444/pdDo4jsOTJ084Pz9nb2+PIAgMvNDtdk0EEcex+X8ZDSlzY22DIZ6n5JXsbmbJLUgp4/clWqeDZGTK2ffxWZbBO/K4Xcdu7zksJv9FpEJIGrqOj4/xfZ/Nzc2FDt4oisxzZKaDGG/xqoVqWQyGlFoKz78koqUOX5Logrd/X3AaXPNASeGCFDK8jrwZBiCKU476+T/lOCTOy/zudiLR9hKVUimdQ6JxksR0CDuOIk5ioyAc1wGt8UsF9t+5hyJh+84h+UKR333xL7QHY5qDEf5Vm+Goz25dcdXuMJvNKNcqjEdpKNl5/Ajx2hutPvX6BoPxmPFMc2evhpekXCT9bp9StcJgMGC7XuNqPDKHbDINlnoR149p9HfgRHqJhmGXQRzyNLd6T9FWkNkb367ksD35hcguoyTsxh/ZV9sYHBwcoFTa3q+U4vj4mMFgYEL8IAio1WoMh0MGgwGbm5vGWxTeGaF+Fg9fKUW9XgeuvTDBoLe2thgOh+Z8Zo3e9ylCfbBqb9VW0NlKoKxkn5c9A7Kn9vNlLcWo2zmdZ8+e4boutVrNdA+bOR9Ww6FNJy2NcVpfN1gJr78YDunqFVI/adwTDiCZK5BFK+zv911EB1EUGb6gH1wSWCSbFMwqjOz/KaXSOvdEg4ZZHKUD0L0Yh2u8LorTxiANuMUCURDy7oP3OX3+jI2dbYIkYaoTgnBCdXMLlfMol+aKX6dWt1guMZsFhqY1V8gxngbEWuE6muF4St51KJerHBwdEkUJuXyR2MHgx1Kyd1MOJ/1uaU/DMgx9dQuvSJSeZ85HjM/OV3r5ZUM9gJf21DbstpLPJolF4WehAvl/qRgJw5D33nuPRqPBZDKh2+3S7/dTCpA5+Vc+n6fVapl6avHmpUbc931TPSRMjeVymb29PUNaJklpuSlzuRzdbndpg9Ayg3ZbMJF93dlsRrvdXvl7LPt+q7yuHfEJJYScDxnqIklem5RNjIBAOWLcBe+3k/SSxJd/kiCW6YJSnQSLcweWyTKEYtViR8PSrPa68kYYgGyyMBsuZiMAux7XbKAYgETjzGmXcSCJ5tcE0xnqOA5auSg3plTdYGf/gKurKwbDMe8c3mEySUsIi8Uis0JAsVAgUhHe5ibF+aF7/PjJnPSrNMcSE8rlPKDTyVFBSP3giPPLBvlSkdFsYgaaKCU1xclLXr58H9d10FotVSarEpW4JCSgEtAxTGcrvf4y47XMsGd/X5Zgy0YGNqxkM0ZKtLG3t2e8wWazaSo+BBO2OV5yuRzFYhHP83j8+DFBEJDP543HKEk3IRM8Ojqi2WyyublpZriORqOFjt9lEIhEKeJJ3laUkH1voS9Y9fVvwve/7rXZaCD7f8vWTpq+arXawuB3m4bbnr9cLBYNvKOUMvN/lbpOMNsNZkIMaBPC2d3UcsaysgzGui2xDYDAV68rb4QBsLPqoiDs5ouFJKELOpnDBvF11YhJAMcxcRITRQ75JIev0gWL4gAtteUAQZgqXw35QomHDz7k7jv3OHv+mO5VA99z6Pf7vPPhhzx58oTBaEi9vsNGrUYQxZT8At1Bn8vLS/bffYfJLD0gTjpuHu0oBpMxiesRJtAbTogTl8k0xnUhimzFuFgiCaCUSxTdbn5AQ6r8SeuQkmi1lAUSAdgRnSg/uwwUFqsssoYerjtA7QSw/bj8Ldwskg+o1Wr87Gc/o9ls0mg0UCodGHLv3j2TAN7e3qZWq5mEcaPRoNVqUa/XTeJYYAgbPpC5AqLMX+UlyneW37+vJPGqJZvotSWrEJc1L2XhP9uQi8Mmf8N1olj2WaA+4esRvSEGXtZd5iaIopezKcbAcRzTHyCG2TbodiSbNXx2YxrcXke/HfnK93xdeSMMgE0BsEwWvEQWYQNjNFAonaSdxHEMiUapEMeVhjEH5WGmfpn6cp2GhClFBNQ3a+QdTavVRGtNGM3Y2q4zmU0ZTSZo5dLpdfHyeXbyO7i+x87BHU7Pz1J64qO7Zo7oydk5iYJWt4tfLDCdXRNW3SQS6trPuS1lIeyhaFMpulJ5VeLezg3I49m8TjYRaP+/nQvIYsi2gpVqHbmZBQ5RSnHnzh2jSIQioFqt4jgOpVKJcrls8Hy5hlBSB0FgMGh7mttNeyVndtWT376JrPr9svv5dYpfxFaM8hqJcIEFGmbZLxsKlL9936dSqVAul00EKLMQyuWyoYWuVqumOU/yPtIFLlCg0IgI4ZpcS5Ktdq9H9rPLd7Kdldve22Vr+DryRhiAmxSF/fg11PNyfiB9nUrHRSYp503K8J8SwLmmmcBBa2GonBsB0rJRrTUJGpWkeO+g26PVaeEX8vMmoxnBYESjeUWuUGTYbqcJoiSdOnR+fk4CNJtNAh0TJBHtXhe/WMTJ+fQHI/OerxIbH74t6Odmub2JYLDoMS3z9LP4v30ebC87SZKXKiBsGFHeV/Beea8oigz3vBgNaQ46Pz83lNLFYtHc/O12m9lsZqZVQTrDVroxBYv9Jnv1fe3rbb+X/X1eBwaRfZP7+1XXE2Mhil68fuGJkvGNAu8lSWL6PwROchyHarVqoFmByqSsWyDEV62fnSO4bcl+jh+MAcjeqDcpBkihChtDNIrCcVKIR2sSrVLPPtTEHuC6aBRJZHlf8fywzZPEUZIQJTH5YloxUCiXSDotHj16hON7oD0ur1rkigVOGhfEel6CqJO047KywdXVFf3hObGCcrlK4ip6wwGxTqhUNxn2R6YJ6iZ5HQtv3yzf6rVKaCJWe4jt+mxYpPG191S8QLtayPb07W5gEcFos0o/m2CV2nxRAgITHB8fm9D96urKkMrZBkvwYeEeknpwpdISUtd1qVQq9Hq9r12LVXtub4LYSv9V0ftNj9v3u82vs+xaN3ngWmtTkCF8P9IZLvO3pVlPuoOTJGXllUQxYIy5wElxHBv6hVcZtdfZS/u138RwZo3RKnIOb4QBsG9YcwMTg3ZwlAMoEi20v2q5AdAOSRynhUBxDElErBTBDBxHOmAtXplkHgnoiCiOiZKYOEnAddnevYPj5zhK4PT8Iq1C8H0G0ylxovHzeXSiabZalEolmq1OSmlbrRCNxoxGQ4Koi+vn2CpX6PYGDPsDpKrn91bUKxaHxExA06TR1apFoB5R1Flc31Yeyyihs3QQ8tOGj5Yp/ywUpFQ63GU2m7Gzs2Nq5IvFIpVKxbT921OjAJNgHI/H5pqFQsFUdNlzXG9zL7+L9/imkk16/j6fKXsPA4buIWvsb3qtiHQCR1FkIjIx7tK8J1QPQhdSKBTMXGgx6pIYlkEsy5r6Vpno/bbX+sFGAMBLBgCub+IFCEgtUgWYA6QSkmSeCI4idBSDSpgwZ/hkvuBz3n9HzysxVAorRDohiWO8fB43CKjVd1Iv00t5uPuTEc1uF1wXlc/T7fc5OLzDeDwlP6edLlcrzNodKpW09t/LKcbjKdvb25ydXSD7bSe+vnuYZ7lorVfejyxKwqZolmgvC/XIvtrPtR8TT146NLXWxkNfli+Qn/IawY2VUpTLZcNBL2Wgo9GIjY00itvf32c4HBrDUJ3TiSilTAWKUspACrYC+7pcwA9Fvq3yWgYTLfP2s2NEXyV2nkde2+/30VqbLmFxIKT8WphSpWQ4jmMDFwnR2mAwMNVFy77DKo3A9y1vhAHQxIBCKQeNJk5iXJn7q1RKC6Gu/2mlF/5GKRKVWmulNUkSEc8Hvs+CiNBJ5wVLrlApjYpi4iQkCSMcrXGjiIKXIwymhI5GlQpUSgdUdg9xUFQnffCLpiX96M47DAY9xpOQwWRMxU+X8s7OHrMwoJIv0up2GI2njKcj8kUf3y0Yb+VW1vFbKp0YFrK/q1ZZWS/RxsqXGXZ5vn2DiTKXG1mUgs3Pnk0C27kC8QbluTI+slqtLnSFCre/1PVXKhXTRKS1ZmNjwxgTIeYqFApUq9Wle7pqw/6mGZSsMrQrsZZJVnFmPX3J0SyjBbFfY+cGAUPtIUPa7fLN8XhsCNTEgbB7QSTilHJgiUDq9Xo6uW9ON2Eb9lUr/+87snsjDIDS877aJP1FqRTyuV549ZKyyP5DGr5sGIDr/IIGwjDF+5TSuHFaGhoHIY7WdK+u6HW6JPGM3375BbXtLT54+CM2yjVGoxH5Qo7Dw0OGwyFXnXT6U622gecXabSueHb8HK01ewf7nJycMAlmJGgqlRL94RjX0wZmWPVczzdZ5Ma3y9aWKf+bjIFcI5sctyMJ8c5FZH4qwGg0otfrEccxp6enFAoFjo6OKJfLpkHo8PCQSqViBolXq1VTZ352dkYul6NQKHB5eWk4YYQywFYgP0Scf5ksS2Z/W8WYHZqz7BqSF8qupSR8hQq8UCiglKLVaqVMv3O6Dpn4JhGFlO1GUWTI/4TAT6IF4X9SShnjnoUuVynf9zl5IwyASHYxRFEklmdoe3yLHuMcq0sSsDzMWPBhII4j89wkSRVyGAQk01nqLUQhg26H8XjEaDqmWChx98gjCkJ6/SGV6lZaIdJzOD454Z13D8FLQ81KpUKn0+Hq6gq/kEc7ilkY0O0PKRT89HNkvNi3RWwjANfeXzYhbHv/9u82pm9HEXJj26WEkDI6Cibc6/XodDqMRiOeP39uHvvwww9N5YfAQTIVqlqtUq1W8X2fTqdDr9cz3aVSRSKEYkpdN6K9LfDPdyW2kbCjPFHwzWbTVOpILgfSnECpVDIQnTR37e/vG2dAPP69vT2TN7AHCMkZlaKBH+o9+0YYAPvmWZbgTREf+VsDi5l5+4ZLG5qi64YjgRy0RpskcAJRnDIDTiYQhCjPNTdzkiRMZwG//vWvIQbfzTGZDpgFCdpRdHs9yhtVPvnsMx4+/IipBQF0B306vS4KBzfnc3Cwz3QWGogh+3nflBzAbUg2WQi8lBOQx+Sn/btcQ2RZ96xtHOTaUtYnWD2wkCT84osvKBQK+L7PdDo19eNC5/Do0SOOjo4WrtftdhmPxwY22N7eNnXlq5zR+q9FvonHf9NzstBO9l5eliOwYSFJzsrjotAlkQuYDm8xFrLPu7u7TKdTUzkkMI80nQl1tE1PLZ9x2Xn+1y7qh6p81rKWtaxlLa+W1+8lXsta1rKWtfyrlLUBWMta1rKWt1TWBmAta1nLWt5SWRuAtaxlLWt5S2VtANaylrWs5S2VtQFYy1rWspa3VNYGYC1rWcta3lJZG4C1rGUta3lLZW0A1rKWtazlLZW1AVjLWtaylrdU1gZgLWtZy1reUlkbgLWsZS1reUtlbQDWspa1rOUtlbUBWMta1rKWt1TWBmAta1nLWt5SWRuAtaxlLWt5S2VtANaylrWs5S2VtQFYy1rWspa3VNYGYC1rWcta3lJZG4C1rGUta3lLZW0A1rKWtazlLZW1AVjLWtaylrdU1gZgLWtZy1reUvn/ARBgIjNg3QO6AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22d83807ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# from scipy.misc import imread, imresize\n",
    "from imageio import imread\n",
    "from skimage.transform import resize\n",
    "\n",
    "kitten, puppy = imread('kitten.jpg'), imread('puppy.jpg')      # 维度顺序 (H, W, C)\n",
    "# print(kitten.shape)\n",
    "# kitten is wide, and puppy is already square\n",
    "d = kitten.shape[1] - kitten.shape[0]\n",
    "kitten_cropped = kitten[:, d//2:-d//2, :]          # 在宽方向，两边分别截掉d/2使宽和高相等\n",
    "\n",
    "img_size = 200   # Make this smaller if it runs too slow\n",
    "x = np.zeros((2, 3, img_size, img_size))\n",
    "x[0, :, :, :] = resize(puppy, (img_size, img_size)).transpose((2, 0, 1))   # 维度变为 (N,C,H,W)\n",
    "x[1, :, :, :] = resize(kitten_cropped, (img_size, img_size)).transpose((2, 0, 1))\n",
    "\n",
    "# Set up a convolutional weights holding 2 filters, each 3x3\n",
    "w = np.zeros((2, 3, 3, 3))\n",
    "\n",
    "# The first filter converts the image to grayscale.\n",
    "# Set up the red, green, and blue channels of the filter.\n",
    "w[0, 0, :, :] = [[0, 0, 0], [0, 0.3, 0], [0, 0, 0]]      # R\n",
    "w[0, 1, :, :] = [[0, 0, 0], [0, 0.6, 0], [0, 0, 0]]      # G\n",
    "w[0, 2, :, :] = [[0, 0, 0], [0, 0.1, 0], [0, 0, 0]]      # B\n",
    "\n",
    "# Second filter detects horizontal edges in the blue channel.\n",
    "w[1, 2, :, :] = [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]     # B\n",
    "\n",
    "# Vector of biases. We don't need any bias for the grayscale\n",
    "# filter, but for the edge detection filter we want to add 128\n",
    "# to each output so that nothing is negative.\n",
    "b = np.array([0, 128])\n",
    "\n",
    "# Compute the result of convolving each input in x with each filter in w,\n",
    "# offsetting by b, and storing the results in out.\n",
    "out, _ = conv_forward_naive(x, w, b, {'stride': 1, 'pad': 1})\n",
    "\n",
    "def imshow_noax(img, normalize=True):\n",
    "    \"\"\" Tiny helper to show images as uint8 and remove axis labels \"\"\"\n",
    "    if normalize:\n",
    "        img_max, img_min = np.max(img), np.min(img)\n",
    "        img = 255.0 * (img - img_min) / (img_max - img_min)\n",
    "    plt.imshow(img.astype('uint8'))\n",
    "    plt.gca().axis('off')\n",
    "\n",
    "# Show the original images and the results of the conv operation\n",
    "plt.subplot(2, 3, 1)\n",
    "imshow_noax(puppy, normalize=False)\n",
    "plt.title('Original image')\n",
    "plt.subplot(2, 3, 2)\n",
    "imshow_noax(out[0, 0])\n",
    "plt.title('Grayscale')\n",
    "plt.subplot(2, 3, 3)\n",
    "imshow_noax(out[0, 1])\n",
    "plt.title('Edges')\n",
    "plt.subplot(2, 3, 4)\n",
    "imshow_noax(kitten_cropped, normalize=False)\n",
    "plt.subplot(2, 3, 5)\n",
    "imshow_noax(out[1, 0])\n",
    "plt.subplot(2, 3, 6)\n",
    "imshow_noax(out[1, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Convolution: Naive backward pass\n",
    "Implement the backward pass for the convolution operation in the function `conv_backward_naive` in the file `cs231n/layers.py`. Again, you don't need to worry too much about computational efficiency.\n",
    "\n",
    "When you are done, run the following to check your backward pass with a numeric gradient check."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing conv_backward_naive function\n",
      "dx error:  1.159803161159293e-08\n",
      "dw error:  2.2471264748452487e-10\n",
      "db error:  3.37264006649648e-11\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "x = np.random.randn(4, 3, 5, 5)      # (N,C,H,W)\n",
    "w = np.random.randn(2, 3, 3, 3)      # (F,C,H,W)\n",
    "b = np.random.randn(2,)\n",
    "dout = np.random.randn(4, 2, 5, 5)   # (N,F,H,W)\n",
    "conv_param = {'stride': 1, 'pad': 1}\n",
    "\n",
    "dx_num = eval_numerical_gradient_array(lambda x: conv_forward_naive(x, w, b, conv_param)[0], x, dout)\n",
    "dw_num = eval_numerical_gradient_array(lambda w: conv_forward_naive(x, w, b, conv_param)[0], w, dout)\n",
    "db_num = eval_numerical_gradient_array(lambda b: conv_forward_naive(x, w, b, conv_param)[0], b, dout)\n",
    "\n",
    "out, cache = conv_forward_naive(x, w, b, conv_param)\n",
    "dx, dw, db = conv_backward_naive(dout, cache)\n",
    "\n",
    "# Your errors should be around e-8 or less.\n",
    "print('Testing conv_backward_naive function')\n",
    "print('dx error: ', rel_error(dx, dx_num))\n",
    "print('dw error: ', rel_error(dw, dw_num))\n",
    "print('db error: ', rel_error(db, db_num))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Max-Pooling: Naive forward\n",
    "Implement the forward pass for the max-pooling operation in the function `max_pool_forward_naive` in the file `cs231n/layers.py`. Again, don't worry too much about computational efficiency.\n",
    "\n",
    "Check your implementation by running the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing max_pool_forward_naive function:\n",
      "difference:  4.1666665157267834e-08\n"
     ]
    }
   ],
   "source": [
    "x_shape = (2, 3, 4, 4)\n",
    "x = np.linspace(-0.3, 0.4, num=np.prod(x_shape)).reshape(x_shape)\n",
    "pool_param = {'pool_width': 2, 'pool_height': 2, 'stride': 2}\n",
    "\n",
    "out, _ = max_pool_forward_naive(x, pool_param)\n",
    "\n",
    "correct_out = np.array([[[[-0.26315789, -0.24842105],\n",
    "                          [-0.20421053, -0.18947368]],\n",
    "                         [[-0.14526316, -0.13052632],\n",
    "                          [-0.08631579, -0.07157895]],\n",
    "                         [[-0.02736842, -0.01263158],\n",
    "                          [ 0.03157895,  0.04631579]]],\n",
    "                        [[[ 0.09052632,  0.10526316],\n",
    "                          [ 0.14947368,  0.16421053]],\n",
    "                         [[ 0.20842105,  0.22315789],\n",
    "                          [ 0.26736842,  0.28210526]],\n",
    "                         [[ 0.32631579,  0.34105263],\n",
    "                          [ 0.38526316,  0.4       ]]]])\n",
    "\n",
    "# Compare your output with ours. Difference should be on the order of e-8.\n",
    "print('Testing max_pool_forward_naive function:')\n",
    "print('difference: ', rel_error(out, correct_out))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Max-Pooling: Naive backward\n",
    "Implement the backward pass for the max-pooling operation in the function `max_pool_backward_naive` in the file `cs231n/layers.py`. You don't need to worry about computational efficiency.\n",
    "\n",
    "Check your implementation with numeric gradient checking by running the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing max_pool_backward_naive function:\n",
      "dx error:  3.27562514223145e-12\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "x = np.random.randn(3, 2, 8, 8)\n",
    "dout = np.random.randn(3, 2, 4, 4)\n",
    "pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2}\n",
    "\n",
    "dx_num = eval_numerical_gradient_array(lambda x: max_pool_forward_naive(x, pool_param)[0], x, dout)\n",
    "\n",
    "out, cache = max_pool_forward_naive(x, pool_param)\n",
    "dx = max_pool_backward_naive(dout, cache)\n",
    "\n",
    "# Your error should be on the order of e-12\n",
    "print('Testing max_pool_backward_naive function:')\n",
    "print('dx error: ', rel_error(dx, dx_num))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fast layers\n",
    "Making convolution and pooling layers fast can be challenging. To spare you the pain, we've provided fast implementations of the forward and backward passes for convolution and pooling layers in the file `cs231n/fast_layers.py`.\n",
    "\n",
    "The fast convolution implementation depends on a Cython extension; to compile it you need to run the following from the `cs231n` directory:\n",
    "\n",
    "```bash\n",
    "python setup.py build_ext --inplace\n",
    "```\n",
    "\n",
    "The API for the fast versions of the convolution and pooling layers is exactly the same as the naive versions that you implemented above: the forward pass receives data, weights, and parameters and produces outputs and a cache object; the backward pass recieves upstream derivatives and the cache object and produces gradients with respect to the data and weights.\n",
    "\n",
    "**NOTE:** The fast implementation for pooling will only perform optimally if the pooling regions are non-overlapping and tile the input. If these conditions are not met then the fast pooling implementation will not be much faster than the naive implementation.\n",
    "\n",
    "You can compare the performance of the naive and fast versions of these layers by running the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing conv_forward_fast:\n",
      "Naive: 4.222006s\n",
      "Fast: 0.023061s\n",
      "Speedup: 183.079628x\n",
      "Difference:  4.926407851494105e-11\n",
      "\n",
      "Testing conv_backward_fast:\n",
      "Naive: 7.745590s\n",
      "Fast: 0.014038s\n",
      "Speedup: 551.774143x\n",
      "dx difference:  1.949764775345631e-11\n",
      "dw difference:  5.188375174206562e-13\n",
      "db difference:  3.481354613192702e-14\n"
     ]
    }
   ],
   "source": [
    "# Rel errors should be around e-9 or less\n",
    "from cs231n.fast_layers import conv_forward_fast, conv_backward_fast\n",
    "from time import time\n",
    "np.random.seed(231)\n",
    "x = np.random.randn(100, 3, 31, 31)\n",
    "w = np.random.randn(25, 3, 3, 3)\n",
    "b = np.random.randn(25,)\n",
    "dout = np.random.randn(100, 25, 16, 16)\n",
    "conv_param = {'stride': 2, 'pad': 1}\n",
    "\n",
    "t0 = time()\n",
    "out_naive, cache_naive = conv_forward_naive(x, w, b, conv_param)\n",
    "t1 = time()\n",
    "out_fast, cache_fast = conv_forward_fast(x, w, b, conv_param)\n",
    "t2 = time()\n",
    "\n",
    "print('Testing conv_forward_fast:')\n",
    "print('Naive: %fs' % (t1 - t0))\n",
    "print('Fast: %fs' % (t2 - t1))\n",
    "print('Speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n",
    "print('Difference: ', rel_error(out_naive, out_fast))\n",
    "\n",
    "t0 = time()\n",
    "dx_naive, dw_naive, db_naive = conv_backward_naive(dout, cache_naive)\n",
    "t1 = time()\n",
    "dx_fast, dw_fast, db_fast = conv_backward_fast(dout, cache_fast)\n",
    "t2 = time()\n",
    "\n",
    "print('\\nTesting conv_backward_fast:')\n",
    "print('Naive: %fs' % (t1 - t0))\n",
    "print('Fast: %fs' % (t2 - t1))\n",
    "print('Speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n",
    "print('dx difference: ', rel_error(dx_naive, dx_fast))\n",
    "print('dw difference: ', rel_error(dw_naive, dw_fast))\n",
    "print('db difference: ', rel_error(db_naive, db_fast))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing pool_forward_fast:\n",
      "Naive: 0.010026s\n",
      "fast: 0.005014s\n",
      "speedup: 1.999620x\n",
      "difference:  0.0\n",
      "\n",
      "Testing pool_backward_fast:\n",
      "Naive: 0.023061s\n",
      "fast: 0.013035s\n",
      "speedup: 1.769118x\n",
      "dx difference:  0.0\n"
     ]
    }
   ],
   "source": [
    "# Relative errors should be close to 0.0\n",
    "from cs231n.fast_layers import max_pool_forward_fast, max_pool_backward_fast\n",
    "np.random.seed(231)\n",
    "x = np.random.randn(100, 3, 32, 32)\n",
    "dout = np.random.randn(100, 3, 16, 16)\n",
    "pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2}\n",
    "\n",
    "t0 = time()\n",
    "out_naive, cache_naive = max_pool_forward_naive(x, pool_param)\n",
    "t1 = time()\n",
    "out_fast, cache_fast = max_pool_forward_fast(x, pool_param)\n",
    "t2 = time()\n",
    "\n",
    "print('Testing pool_forward_fast:')\n",
    "print('Naive: %fs' % (t1 - t0))\n",
    "print('fast: %fs' % (t2 - t1))\n",
    "print('speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n",
    "print('difference: ', rel_error(out_naive, out_fast))\n",
    "\n",
    "t0 = time()\n",
    "dx_naive = max_pool_backward_naive(dout, cache_naive)\n",
    "t1 = time()\n",
    "dx_fast = max_pool_backward_fast(dout, cache_fast)\n",
    "t2 = time()\n",
    "\n",
    "print('\\nTesting pool_backward_fast:')\n",
    "print('Naive: %fs' % (t1 - t0))\n",
    "print('fast: %fs' % (t2 - t1))\n",
    "print('speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n",
    "print('dx difference: ', rel_error(dx_naive, dx_fast))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Convolutional \"sandwich\" layers\n",
    "Previously we introduced the concept of \"sandwich\" layers that combine multiple operations into commonly used patterns. In the file `cs231n/layer_utils.py` you will find sandwich layers that implement a few commonly used patterns for convolutional networks."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing conv_relu_pool\n",
      "dx error:  5.828178746516271e-09\n",
      "dw error:  8.443628091870788e-09\n",
      "db error:  3.57960501324485e-10\n"
     ]
    }
   ],
   "source": [
    "from cs231n.layer_utils import conv_relu_pool_forward, conv_relu_pool_backward\n",
    "np.random.seed(231)\n",
    "x = np.random.randn(2, 3, 16, 16)\n",
    "w = np.random.randn(3, 3, 3, 3)\n",
    "b = np.random.randn(3,)\n",
    "dout = np.random.randn(2, 3, 8, 8)\n",
    "conv_param = {'stride': 1, 'pad': 1}\n",
    "pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2}\n",
    "\n",
    "out, cache = conv_relu_pool_forward(x, w, b, conv_param, pool_param)\n",
    "dx, dw, db = conv_relu_pool_backward(dout, cache)\n",
    "\n",
    "dx_num = eval_numerical_gradient_array(lambda x: conv_relu_pool_forward(x, w, b, conv_param, pool_param)[0], x, dout)\n",
    "dw_num = eval_numerical_gradient_array(lambda w: conv_relu_pool_forward(x, w, b, conv_param, pool_param)[0], w, dout)\n",
    "db_num = eval_numerical_gradient_array(lambda b: conv_relu_pool_forward(x, w, b, conv_param, pool_param)[0], b, dout)\n",
    "\n",
    "# Relative errors should be around e-8 or less\n",
    "print('Testing conv_relu_pool')\n",
    "print('dx error: ', rel_error(dx_num, dx))\n",
    "print('dw error: ', rel_error(dw_num, dw))\n",
    "print('db error: ', rel_error(db_num, db))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing conv_relu:\n",
      "dx error:  3.5600610115232832e-09\n",
      "dw error:  2.2497700915729298e-10\n",
      "db error:  1.3087619975802167e-10\n"
     ]
    }
   ],
   "source": [
    "from cs231n.layer_utils import conv_relu_forward, conv_relu_backward\n",
    "np.random.seed(231)\n",
    "x = np.random.randn(2, 3, 8, 8)\n",
    "w = np.random.randn(3, 3, 3, 3)\n",
    "b = np.random.randn(3,)\n",
    "dout = np.random.randn(2, 3, 8, 8)\n",
    "conv_param = {'stride': 1, 'pad': 1}\n",
    "\n",
    "out, cache = conv_relu_forward(x, w, b, conv_param)\n",
    "dx, dw, db = conv_relu_backward(dout, cache)\n",
    "\n",
    "dx_num = eval_numerical_gradient_array(lambda x: conv_relu_forward(x, w, b, conv_param)[0], x, dout)\n",
    "dw_num = eval_numerical_gradient_array(lambda w: conv_relu_forward(x, w, b, conv_param)[0], w, dout)\n",
    "db_num = eval_numerical_gradient_array(lambda b: conv_relu_forward(x, w, b, conv_param)[0], b, dout)\n",
    "\n",
    "# Relative errors should be around e-8 or less\n",
    "print('Testing conv_relu:')\n",
    "print('dx error: ', rel_error(dx_num, dx))\n",
    "print('dw error: ', rel_error(dw_num, dw))\n",
    "print('db error: ', rel_error(db_num, db))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Three-layer ConvNet\n",
    "Now that you have implemented all the necessary layers, we can put them together into a simple convolutional network.\n",
    "\n",
    "Open the file `cs231n/classifiers/cnn.py` and complete the implementation of the `ThreeLayerConvNet` class. Remember you can use the fast/sandwich layers (already imported for you) in your implementation. Run the following cells to help you debug:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sanity check loss\n",
    "After you build a new network, one of the first things you should do is sanity check the loss. When we use the softmax loss, we expect the loss for random weights (and no regularization) to be about `log(C)` for `C` classes. When we add regularization this should go up."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initial loss (no regularization):  2.3025850635890874\n",
      "Initial loss (with regularization):  2.508600069296828\n"
     ]
    }
   ],
   "source": [
    "model = ThreeLayerConvNet()\n",
    "\n",
    "N = 50\n",
    "X = np.random.randn(N, 3, 32, 32)\n",
    "y = np.random.randint(10, size=N)\n",
    "\n",
    "loss, grads = model.loss(X, y)\n",
    "print('Initial loss (no regularization): ', loss)\n",
    "\n",
    "model.reg = 0.5\n",
    "loss, grads = model.loss(X, y)\n",
    "print('Initial loss (with regularization): ', loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Gradient check\n",
    "After the loss looks reasonable, use numeric gradient checking to make sure that your backward pass is correct. When you use numeric gradient checking you should use a small amount of artifical data and a small number of neurons at each layer. Note: correct implementations may still have relative errors up to the order of e-2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W1 max relative error: 1.380104e-04\n",
      "W2 max relative error: 1.822723e-02\n",
      "W3 max relative error: 3.064049e-04\n",
      "b1 max relative error: 3.477652e-05\n",
      "b2 max relative error: 2.516375e-03\n",
      "b3 max relative error: 7.945660e-10\n"
     ]
    }
   ],
   "source": [
    "num_inputs = 2\n",
    "input_dim = (3, 16, 16)\n",
    "reg = 0.0\n",
    "num_classes = 10\n",
    "np.random.seed(231)\n",
    "X = np.random.randn(num_inputs, *input_dim)\n",
    "y = np.random.randint(num_classes, size=num_inputs)\n",
    "\n",
    "model = ThreeLayerConvNet(num_filters=3, filter_size=3,\n",
    "                          input_dim=input_dim, hidden_dim=7,\n",
    "                          dtype=np.float64)\n",
    "loss, grads = model.loss(X, y)\n",
    "# Errors should be small, but correct implementations may have\n",
    "# relative errors up to the order of e-2\n",
    "for param_name in sorted(grads):\n",
    "    f = lambda _: model.loss(X, y)[0]\n",
    "    param_grad_num = eval_numerical_gradient(f, model.params[param_name], verbose=False, h=1e-6)\n",
    "    e = rel_error(param_grad_num, grads[param_name])\n",
    "    print('%s max relative error: %e' % (param_name, rel_error(param_grad_num, grads[param_name])))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Overfit small data\n",
    "A nice trick is to train your model with just a few training samples. You should be able to overfit small datasets, which will result in very high training accuracy and comparatively low validation accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(Iteration 1 / 50) loss: 2.414060\n",
      "(Epoch 0 / 25) train acc: 0.200000; val_acc: 0.137000\n",
      "(Iteration 2 / 50) loss: 3.102925\n",
      "(Epoch 1 / 25) train acc: 0.140000; val_acc: 0.087000\n",
      "(Iteration 3 / 50) loss: 2.270330\n",
      "(Iteration 4 / 50) loss: 2.096705\n",
      "(Epoch 2 / 25) train acc: 0.240000; val_acc: 0.094000\n",
      "(Iteration 5 / 50) loss: 1.838880\n",
      "(Iteration 6 / 50) loss: 1.934188\n",
      "(Epoch 3 / 25) train acc: 0.510000; val_acc: 0.173000\n",
      "(Iteration 7 / 50) loss: 1.827912\n",
      "(Iteration 8 / 50) loss: 1.639574\n",
      "(Epoch 4 / 25) train acc: 0.520000; val_acc: 0.188000\n",
      "(Iteration 9 / 50) loss: 1.330082\n",
      "(Iteration 10 / 50) loss: 1.756115\n",
      "(Epoch 5 / 25) train acc: 0.630000; val_acc: 0.167000\n",
      "(Iteration 11 / 50) loss: 1.024162\n",
      "(Iteration 12 / 50) loss: 1.041826\n",
      "(Epoch 6 / 25) train acc: 0.750000; val_acc: 0.229000\n",
      "(Iteration 13 / 50) loss: 1.142777\n",
      "(Iteration 14 / 50) loss: 0.835706\n",
      "(Epoch 7 / 25) train acc: 0.790000; val_acc: 0.247000\n",
      "(Iteration 15 / 50) loss: 0.587786\n",
      "(Iteration 16 / 50) loss: 0.645509\n",
      "(Epoch 8 / 25) train acc: 0.820000; val_acc: 0.252000\n",
      "(Iteration 17 / 50) loss: 0.786844\n",
      "(Iteration 18 / 50) loss: 0.467054\n",
      "(Epoch 9 / 25) train acc: 0.820000; val_acc: 0.178000\n",
      "(Iteration 19 / 50) loss: 0.429880\n",
      "(Iteration 20 / 50) loss: 0.635498\n",
      "(Epoch 10 / 25) train acc: 0.900000; val_acc: 0.206000\n",
      "(Iteration 21 / 50) loss: 0.365807\n",
      "(Iteration 22 / 50) loss: 0.284220\n",
      "(Epoch 11 / 25) train acc: 0.820000; val_acc: 0.201000\n",
      "(Iteration 23 / 50) loss: 0.469343\n",
      "(Iteration 24 / 50) loss: 0.509369\n",
      "(Epoch 12 / 25) train acc: 0.920000; val_acc: 0.211000\n",
      "(Iteration 25 / 50) loss: 0.111638\n",
      "(Iteration 26 / 50) loss: 0.145388\n",
      "(Epoch 13 / 25) train acc: 0.930000; val_acc: 0.213000\n",
      "(Iteration 27 / 50) loss: 0.155575\n",
      "(Iteration 28 / 50) loss: 0.143398\n",
      "(Epoch 14 / 25) train acc: 0.960000; val_acc: 0.212000\n",
      "(Iteration 29 / 50) loss: 0.158160\n",
      "(Iteration 30 / 50) loss: 0.118934\n",
      "(Epoch 15 / 25) train acc: 0.990000; val_acc: 0.220000\n",
      "(Iteration 31 / 50) loss: 0.118063\n",
      "(Iteration 32 / 50) loss: 0.047589\n",
      "(Epoch 16 / 25) train acc: 0.980000; val_acc: 0.221000\n",
      "(Iteration 33 / 50) loss: 0.024229\n",
      "(Iteration 34 / 50) loss: 0.125143\n",
      "(Epoch 17 / 25) train acc: 0.990000; val_acc: 0.223000\n",
      "(Iteration 35 / 50) loss: 0.036110\n",
      "(Iteration 36 / 50) loss: 0.064548\n",
      "(Epoch 18 / 25) train acc: 0.990000; val_acc: 0.210000\n",
      "(Iteration 37 / 50) loss: 0.062753\n",
      "(Iteration 38 / 50) loss: 0.071469\n",
      "(Epoch 19 / 25) train acc: 0.990000; val_acc: 0.217000\n",
      "(Iteration 39 / 50) loss: 0.014180\n",
      "(Iteration 40 / 50) loss: 0.022113\n",
      "(Epoch 20 / 25) train acc: 1.000000; val_acc: 0.226000\n",
      "(Iteration 41 / 50) loss: 0.009373\n",
      "(Iteration 42 / 50) loss: 0.004541\n",
      "(Epoch 21 / 25) train acc: 1.000000; val_acc: 0.214000\n",
      "(Iteration 43 / 50) loss: 0.007400\n",
      "(Iteration 44 / 50) loss: 0.009480\n",
      "(Epoch 22 / 25) train acc: 1.000000; val_acc: 0.211000\n",
      "(Iteration 45 / 50) loss: 0.013874\n",
      "(Iteration 46 / 50) loss: 0.004967\n",
      "(Epoch 23 / 25) train acc: 1.000000; val_acc: 0.218000\n",
      "(Iteration 47 / 50) loss: 0.005245\n",
      "(Iteration 48 / 50) loss: 0.001997\n",
      "(Epoch 24 / 25) train acc: 1.000000; val_acc: 0.227000\n",
      "(Iteration 49 / 50) loss: 0.003281\n",
      "(Iteration 50 / 50) loss: 0.003808\n",
      "(Epoch 25 / 25) train acc: 1.000000; val_acc: 0.231000\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "\n",
    "num_train = 100\n",
    "small_data = {\n",
    "  'X_train': data['X_train'][:num_train],\n",
    "  'y_train': data['y_train'][:num_train],\n",
    "  'X_val': data['X_val'],\n",
    "  'y_val': data['y_val'],\n",
    "}\n",
    "\n",
    "model = ThreeLayerConvNet(weight_scale=1e-2)\n",
    "\n",
    "solver = Solver(model, small_data,\n",
    "                num_epochs=25, batch_size=50,\n",
    "                update_rule='adam',\n",
    "                optim_config={\n",
    "                  'learning_rate': 1e-3,\n",
    "                },\n",
    "                verbose=True, print_every=1)\n",
    "solver.train()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plotting the loss, training accuracy, and validation accuracy should show clear overfitting:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22ddcb42390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(2, 1, 1)\n",
    "plt.plot(solver.loss_history, 'o')\n",
    "plt.xlabel('iteration')\n",
    "plt.ylabel('loss')\n",
    "\n",
    "plt.subplot(2, 1, 2)\n",
    "plt.plot(solver.train_acc_history, '-o')\n",
    "plt.plot(solver.val_acc_history, '-o')\n",
    "plt.legend(['train', 'val'], loc='upper left')\n",
    "plt.xlabel('epoch')\n",
    "plt.ylabel('accuracy')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train the net\n",
    "By training the three-layer convolutional network for one epoch, you should achieve greater than 40% accuracy on the training set:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(Iteration 1 / 980) loss: 2.304603\n",
      "(Epoch 0 / 1) train acc: 0.100000; val_acc: 0.119000\n",
      "(Iteration 21 / 980) loss: 2.197447\n",
      "(Iteration 41 / 980) loss: 2.221259\n",
      "(Iteration 61 / 980) loss: 2.050177\n",
      "(Iteration 81 / 980) loss: 1.888212\n",
      "(Iteration 101 / 980) loss: 1.759195\n",
      "(Iteration 121 / 980) loss: 1.870206\n",
      "(Iteration 141 / 980) loss: 1.746907\n",
      "(Iteration 161 / 980) loss: 1.907402\n",
      "(Iteration 181 / 980) loss: 1.921172\n",
      "(Iteration 201 / 980) loss: 1.848192\n",
      "(Iteration 221 / 980) loss: 1.515097\n",
      "(Iteration 241 / 980) loss: 1.887948\n",
      "(Iteration 261 / 980) loss: 1.764643\n",
      "(Iteration 281 / 980) loss: 1.827303\n",
      "(Iteration 301 / 980) loss: 1.822272\n",
      "(Iteration 321 / 980) loss: 1.659407\n",
      "(Iteration 341 / 980) loss: 1.712116\n",
      "(Iteration 361 / 980) loss: 1.528184\n",
      "(Iteration 381 / 980) loss: 1.801143\n",
      "(Iteration 401 / 980) loss: 1.525123\n",
      "(Iteration 421 / 980) loss: 1.829423\n",
      "(Iteration 441 / 980) loss: 1.553899\n",
      "(Iteration 461 / 980) loss: 1.623733\n",
      "(Iteration 481 / 980) loss: 1.420004\n",
      "(Iteration 501 / 980) loss: 1.434355\n",
      "(Iteration 521 / 980) loss: 1.410728\n",
      "(Iteration 541 / 980) loss: 1.650066\n",
      "(Iteration 561 / 980) loss: 1.491894\n",
      "(Iteration 581 / 980) loss: 1.606097\n",
      "(Iteration 601 / 980) loss: 1.503125\n",
      "(Iteration 621 / 980) loss: 1.550014\n",
      "(Iteration 641 / 980) loss: 1.436899\n",
      "(Iteration 661 / 980) loss: 1.546949\n",
      "(Iteration 681 / 980) loss: 1.698171\n",
      "(Iteration 701 / 980) loss: 1.665740\n",
      "(Iteration 721 / 980) loss: 1.671461\n",
      "(Iteration 741 / 980) loss: 1.708457\n",
      "(Iteration 761 / 980) loss: 1.590439\n",
      "(Iteration 781 / 980) loss: 1.597918\n",
      "(Iteration 801 / 980) loss: 1.473066\n",
      "(Iteration 821 / 980) loss: 1.727150\n",
      "(Iteration 841 / 980) loss: 1.389245\n",
      "(Iteration 861 / 980) loss: 1.476748\n",
      "(Iteration 881 / 980) loss: 1.612998\n",
      "(Iteration 901 / 980) loss: 1.812343\n",
      "(Iteration 921 / 980) loss: 1.793083\n",
      "(Iteration 941 / 980) loss: 1.450237\n",
      "(Iteration 961 / 980) loss: 1.539103\n",
      "(Epoch 1 / 1) train acc: 0.447000; val_acc: 0.460000\n"
     ]
    }
   ],
   "source": [
    "model = ThreeLayerConvNet(weight_scale=0.001, hidden_dim=500, reg=0.001)\n",
    "\n",
    "solver = Solver(model, data,\n",
    "                num_epochs=1, batch_size=50,\n",
    "                update_rule='adam',\n",
    "                optim_config={\n",
    "                  'learning_rate': 1e-3,\n",
    "                },\n",
    "                verbose=True, print_every=20)\n",
    "solver.train()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize Filters\n",
    "You can visualize the first-layer convolutional filters from the trained network by running the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x22ddcb428d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from cs231n.vis_utils import visualize_grid\n",
    "\n",
    "grid = visualize_grid(model.params['W1'].transpose(0, 2, 3, 1))\n",
    "plt.imshow(grid.astype('uint8'))\n",
    "plt.axis('off')\n",
    "\n",
    "plt.gcf().set_size_inches(5, 5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Spatial Batch Normalization\n",
    "We already saw that batch normalization is a very useful technique for training deep fully-connected networks. As proposed in the original paper [3], batch normalization can also be used for convolutional networks, but we need to tweak it a bit; the modification will be called \"spatial batch normalization.\"\n",
    "\n",
    "Normally batch-normalization accepts inputs of shape `(N, D)` and produces outputs of shape `(N, D)`, where we normalize across the minibatch dimension `N`. For data coming from convolutional layers, batch normalization needs to accept inputs of shape `(N, C, H, W)` and produce outputs of shape `(N, C, H, W)` where the `N` dimension gives the minibatch size and the `(H, W)` dimensions give the spatial size of the feature map.\n",
    "\n",
    "If the feature map was produced using convolutions, then we expect the statistics of each feature channel to be relatively consistent both between different imagesand different locations within the same image. Therefore spatial batch normalization computes a mean and variance for each of the `C` feature channels by computing statistics over both the minibatch dimension `N` and the spatial dimensions `H` and `W`.\n",
    "\n",
    "\n",
    "[3] [Sergey Ioffe and Christian Szegedy, \"Batch Normalization: Accelerating Deep Network Training by Reducing\n",
    "Internal Covariate Shift\", ICML 2015.](https://arxiv.org/abs/1502.03167)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Spatial batch normalization: forward\n",
    "\n",
    "In the file `cs231n/layers.py`, implement the forward pass for spatial batch normalization in the function `spatial_batchnorm_forward`. Check your implementation by running the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Before spatial batch normalization:\n",
      "  Shape:  (2, 3, 4, 5)\n",
      "  Means:  [9.33463814 8.90909116 9.11056338]\n",
      "  Stds:  [3.61447857 3.19347686 3.5168142 ]\n",
      "After spatial batch normalization:\n",
      "  Shape:  (2, 3, 4, 5)\n",
      "  Means:  [ 6.18949336e-16  5.99520433e-16 -1.22124533e-16]\n",
      "  Stds:  [0.99999962 0.99999951 0.9999996 ]\n",
      "After spatial batch normalization (nontrivial gamma, beta):\n",
      "  Shape:  (2, 3, 4, 5)\n",
      "  Means:  [6. 7. 8.]\n",
      "  Stds:  [2.99999885 3.99999804 4.99999798]\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "# Check the training-time forward pass by checking means and variances\n",
    "# of features both before and after spatial batch normalization\n",
    "\n",
    "N, C, H, W = 2, 3, 4, 5\n",
    "x = 4 * np.random.randn(N, C, H, W) + 10\n",
    "\n",
    "print('Before spatial batch normalization:')\n",
    "print('  Shape: ', x.shape)\n",
    "print('  Means: ', x.mean(axis=(0, 2, 3)))\n",
    "print('  Stds: ', x.std(axis=(0, 2, 3)))\n",
    "\n",
    "# Means should be close to zero and stds close to one\n",
    "gamma, beta = np.ones(C), np.zeros(C)\n",
    "bn_param = {'mode': 'train'}\n",
    "out, _ = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n",
    "print('After spatial batch normalization:')\n",
    "print('  Shape: ', out.shape)\n",
    "print('  Means: ', out.mean(axis=(0, 2, 3)))\n",
    "print('  Stds: ', out.std(axis=(0, 2, 3)))\n",
    "\n",
    "# Means should be close to beta and stds close to gamma\n",
    "gamma, beta = np.asarray([3, 4, 5]), np.asarray([6, 7, 8])\n",
    "out, _ = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n",
    "print('After spatial batch normalization (nontrivial gamma, beta):')\n",
    "print('  Shape: ', out.shape)\n",
    "print('  Means: ', out.mean(axis=(0, 2, 3)))\n",
    "print('  Stds: ', out.std(axis=(0, 2, 3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After spatial batch normalization (test-time):\n",
      "  means:  [-0.08034406  0.07562881  0.05716371  0.04378383]\n",
      "  stds:  [0.96718744 1.0299714  1.02887624 1.00585577]\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "# Check the test-time forward pass by running the training-time\n",
    "# forward pass many times to warm up the running averages, and then\n",
    "# checking the means and variances of activations after a test-time\n",
    "# forward pass.\n",
    "N, C, H, W = 10, 4, 11, 12\n",
    "\n",
    "bn_param = {'mode': 'train'}\n",
    "gamma = np.ones(C)\n",
    "beta = np.zeros(C)\n",
    "for t in range(50):\n",
    "  x = 2.3 * np.random.randn(N, C, H, W) + 13\n",
    "  spatial_batchnorm_forward(x, gamma, beta, bn_param)\n",
    "bn_param['mode'] = 'test'\n",
    "x = 2.3 * np.random.randn(N, C, H, W) + 13\n",
    "a_norm, _ = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n",
    "\n",
    "# Means should be close to zero and stds close to one, but will be\n",
    "# noisier than training-time forward passes.\n",
    "print('After spatial batch normalization (test-time):')\n",
    "print('  means: ', a_norm.mean(axis=(0, 2, 3)))\n",
    "print('  stds: ', a_norm.std(axis=(0, 2, 3)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Spatial batch normalization: backward\n",
    "In the file `cs231n/layers.py`, implement the backward pass for spatial batch normalization in the function `spatial_batchnorm_backward`. Run the following to check your implementation using a numeric gradient check:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dx error:  2.786648197756335e-07\n",
      "dgamma error:  7.0974817113608705e-12\n",
      "dbeta error:  3.275608725278405e-12\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "N, C, H, W = 2, 3, 4, 5\n",
    "x = 5 * np.random.randn(N, C, H, W) + 12\n",
    "gamma = np.random.randn(C)\n",
    "beta = np.random.randn(C)\n",
    "dout = np.random.randn(N, C, H, W)\n",
    "\n",
    "bn_param = {'mode': 'train'}\n",
    "fx = lambda x: spatial_batchnorm_forward(x, gamma, beta, bn_param)[0]\n",
    "fg = lambda a: spatial_batchnorm_forward(x, gamma, beta, bn_param)[0]\n",
    "fb = lambda b: spatial_batchnorm_forward(x, gamma, beta, bn_param)[0]\n",
    "\n",
    "dx_num = eval_numerical_gradient_array(fx, x, dout)\n",
    "da_num = eval_numerical_gradient_array(fg, gamma, dout)\n",
    "db_num = eval_numerical_gradient_array(fb, beta, dout)\n",
    "\n",
    "#You should expect errors of magnitudes between 1e-12~1e-06\n",
    "_, cache = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n",
    "dx, dgamma, dbeta = spatial_batchnorm_backward(dout, cache)\n",
    "print('dx error: ', rel_error(dx_num, dx))\n",
    "print('dgamma error: ', rel_error(da_num, dgamma))\n",
    "print('dbeta error: ', rel_error(db_num, dbeta))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Group Normalization\n",
    "In the previous notebook, we mentioned that Layer Normalization is an alternative normalization technique that mitigates the batch size limitations of Batch Normalization. However, as the authors of [4] observed, Layer Normalization does not perform as well as Batch Normalization when used with Convolutional Layers:\n",
    "\n",
    ">With fully connected layers, all the hidden units in a layer tend to make similar contributions to the final prediction, and re-centering and rescaling the summed inputs to a layer works well. However, the assumption of similar contributions is no longer true for convolutional neural networks. The large number of the hidden units whose\n",
    "receptive fields lie near the boundary of the image are rarely turned on and thus have very different\n",
    "statistics from the rest of the hidden units within the same layer.\n",
    "\n",
    "The authors of [5] propose an intermediary technique. In contrast to Layer Normalization, where you normalize over the entire feature per-datapoint, they suggest a consistent splitting of each per-datapoint feature into G groups, and a per-group per-datapoint normalization instead. \n",
    "\n",
    "![Comparison of normalization techniques discussed so far](normalization.png)\n",
    "<center>**Visual comparison of the normalization techniques discussed so far (image edited from [5])**</center>\n",
    "\n",
    "Even though an assumption of equal contribution is still being made within each group, the authors hypothesize that this is not as problematic, as innate grouping arises within features for visual recognition. One example they use to illustrate this is that many high-performance handcrafted features in traditional Computer Vision have terms that are explicitly grouped together. Take for example Histogram of Oriented Gradients [6]-- after computing histograms per spatially local block, each per-block histogram is normalized before being concatenated together to form the final feature vector.\n",
    "\n",
    "You will now implement Group Normalization. Note that this normalization technique that you are to implement in the following cells was introduced and published to arXiv *less than a month ago* -- this truly is still an ongoing and excitingly active field of research!\n",
    "\n",
    "[4] [Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. \"Layer Normalization.\" stat 1050 (2016): 21.](https://arxiv.org/pdf/1607.06450.pdf)\n",
    "\n",
    "\n",
    "[5] [Wu, Yuxin, and Kaiming He. \"Group Normalization.\" arXiv preprint arXiv:1803.08494 (2018).](https://arxiv.org/abs/1803.08494)\n",
    "\n",
    "\n",
    "[6] [N. Dalal and B. Triggs. Histograms of oriented gradients for\n",
    "human detection. In Computer Vision and Pattern Recognition\n",
    "(CVPR), 2005.](https://ieeexplore.ieee.org/abstract/document/1467360/)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Group normalization: forward\n",
    "\n",
    "In the file `cs231n/layers.py`, implement the forward pass for group normalization in the function `spatial_groupnorm_forward`. Check your implementation by running the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Before spatial group normalization:\n",
      "  Shape:  (2, 6, 4, 5)\n",
      "  Means:  [9.72505327 8.51114185 8.9147544  9.43448077]\n",
      "  Stds:  [3.67070958 3.09892597 4.27043622 3.97521327]\n",
      "After spatial group normalization:\n",
      "  Shape:  (2, 6, 4, 5)\n",
      "  Means:  [-7.40148683e-18  1.11022302e-17  1.23049719e-16  1.29526020e-17]\n",
      "  Stds:  [0.99999834 0.99999782 0.99999873 0.99999691]\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "# Check the training-time forward pass by checking means and variances\n",
    "# of features both before and after spatial batch normalization\n",
    "\n",
    "N, C, H, W = 2, 6, 4, 5\n",
    "G = 2\n",
    "x = 4 * np.random.randn(N, C, H, W) + 10\n",
    "x_g = x.reshape((N*G,-1))\n",
    "print('Before spatial group normalization:')\n",
    "print('  Shape: ', x.shape)\n",
    "print('  Means: ', x_g.mean(axis=1))\n",
    "print('  Stds: ', x_g.std(axis=1))\n",
    "\n",
    "# Means should be close to zero and stds close to one\n",
    "gamma, beta = np.ones((1,C,1,1)), np.zeros((1,C,1,1))\n",
    "bn_param = {'mode': 'train'}\n",
    "\n",
    "out, _ = spatial_groupnorm_forward(x, gamma, beta, G, bn_param)\n",
    "out_g = out.reshape((N*G,-1))\n",
    "print('After spatial group normalization:')\n",
    "print('  Shape: ', out.shape)\n",
    "print('  Means: ', out_g.mean(axis=1))\n",
    "print('  Stds: ', out_g.std(axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Spatial group normalization: backward\n",
    "In the file `cs231n/layers.py`, implement the backward pass for spatial batch normalization in the function `spatial_groupnorm_backward`. Run the following to check your implementation using a numeric gradient check:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dx error:  5.069502729559608e-08\n",
      "dgamma error:  3.891606265500656e-12\n",
      "dbeta error:  1.3112820990521168e-11\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(231)\n",
    "N, C, H, W = 2, 6, 4, 5\n",
    "G = 2\n",
    "x = 5 * np.random.randn(N, C, H, W) + 12\n",
    "gamma = np.random.randn(1,C,1,1)\n",
    "beta = np.random.randn(1,C,1,1)\n",
    "dout = np.random.randn(N, C, H, W)\n",
    "\n",
    "gn_param = {}\n",
    "fx = lambda x: spatial_groupnorm_forward(x, gamma, beta, G, gn_param)[0]\n",
    "fg = lambda a: spatial_groupnorm_forward(x, gamma, beta, G, gn_param)[0]\n",
    "fb = lambda b: spatial_groupnorm_forward(x, gamma, beta, G, gn_param)[0]\n",
    "\n",
    "dx_num = eval_numerical_gradient_array(fx, x, dout)\n",
    "da_num = eval_numerical_gradient_array(fg, gamma, dout)\n",
    "db_num = eval_numerical_gradient_array(fb, beta, dout)\n",
    "\n",
    "_, cache = spatial_groupnorm_forward(x, gamma, beta, G, gn_param)\n",
    "dx, dgamma, dbeta = spatial_groupnorm_backward(dout, cache)\n",
    "#You should expect errors of magnitudes between 1e-12~1e-07\n",
    "print('dx error: ', rel_error(dx_num, dx))\n",
    "print('dgamma error: ', rel_error(da_num, dgamma))\n",
    "print('dbeta error: ', rel_error(db_num, dbeta))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
